Re[4]: обратиться к объекту из другого модуля
От: Roman1980 http://www.rasland.com, http://free.rasland.com
Дата: 12.11.06 11:52
Оценка:
Здравствуйте, Pieros, Вы писали:

P>нет, друзья, форма создана — 100%,

Ее видно? Проверь еще.
P>проверка типа
P>if (Form1)
P>{
P>}
P>благополучно проходит,

Не факт, что есть форма. Просто указатель Form1 не равен NULL!!! Это раз.

P>на форме есть кнопка, по нажатию на которую включается таймер

P>и по таймеру — вызывается процедура из unit2, но, когда эта процедура обращается к Form1 — появляется ошибка
P>типа того
P>Unit1.cpp:
P>...
P>#include "Unit1.h"
P>...
P>void __fastcall TForm1::Timer1Timer(TObject *Sender)
P>{
P> TInData InData;
P> ...
P> pr(InData)
P>}

P>pr.cpp:

P>#include "Unit1.h"
P>...
P>int pra(TInData inData)
P>{
P> ...
P> Form1->Series1->AddXY(x1,y1);
P> ...
P>}
P>вот примерно так

Ну в названиях я так и не нашел Unit2 и функции то pr, то pra. Списываю это на невнимательность при наборе сообщения и никак не при наборе программы. Но отметить должен был.

Воспользуйся такими инструментами отладки как точка прерывания. Строку на которой возникает ошибка я так понял ты уже нашел. Перед тем как ее запустить на выполнение при пошаговом выполнении просмотри все значения: Form1, Series1. Может что то не существует? Используй не только Watch. Используй "Run/Inspect". Там еще и значения свойств посмотришь. Если объект не создан будет калямаля.

Но еще одно замечание могу дать сразу. Есть такое понятие как сцепление модуля. Это понятие из области проектирования. Еще есть понятие "рефакторинг". Это переписывание кода чтобы сделать его более красивым, логичным, грамотным и т.д. Так вот я тебе советую сделать именно это, чтобы уменьшить сцепление модуля. Постарайся убрать обращение к глобальной переменной Form1. Обращатся из МЕТОДА Формы1 модуля1 к ПРОЦЕДУРЕ модуля2, которая использует ФОРМУ1 уже как глобальную переменную — это очень некрасиво и мудрено. Подумай и постарайся это убрать. Пусть твой таймер для вычислений использует модуль 2, НО добавление делает сам. А функция pr например просто возвращает пару координат которую надо добавить. Ну или сам реши как отрефакторить. Примеры привел, но полностью сказать не могу. Надо уже код смотреть.

Удачи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.