Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Приложение и DLL [D7, WinXP]


Страницы:   1 2

ilkz ©   (2008-01-18 21:09:00) 

Всем привет!
Вопрос такой:
Есть приложение, которое загружает dll-ку и вызывает в ней процедуру, которая должна как-то воздействовать на компоненты формы приложения.

Процедура в dll описана так:
 procedure PluginRun(Application: TApplication);
 var i: integer;
 begin
   for i:=0 to Application.ComponentCount - 1 do
   begin                          
     //if (Application.Components[i].ClassName='TForm1') then //работает
     if Application.Components[i] is TForm then //не работает
     begin
       showmessage('ok');
       //f:=TForm(Application.Components[i]); //работает
       f:=Application.Components[i] as TForm; //не работает
       f.Caption:='hello';
     end;
   end;
 end;

В главном приложении она вызывается так:
plugin.RunProc(Application);
где в поле RunProc record'а plugin хранится адрес процедуры PluginRun.

Проблема вот в чем.
Код, помеченный комментариями "работает" - работает.
Но код, помеченный комментарием "не работает" - не работает: не срабатывает условие if Application.Components[i] is TForm then. Долблюсь уже несколько часов и не могу понять почему? Гугль уже облазил, но кроме первого решения ничего не нашел. Кто может объяснить где косяк и как его вылечить?


ilkz   (2008-01-18 21:48:00) [21]

Ага. Это уже что-то... Буду разбираться, но для начала хотелось бы решить описанную мной проблему, а не переходить на пакеты...


DVM   (2008-01-18 21:45:00) [22]

Ты зря меня не слушаешь про пакеты. В приложении и dll в каждом свои менеджеры памяти и RTTI. И твой TForm в приложении не равен TForm в dll


ilkz   (2008-01-18 21:45:00) [23]

TForm1: ERROR: Undeclared identifier;


DVM   (2008-01-18 21:42:00) [24]


>  не посылать меня использовать то, чего я не знаю.

Пакеты будут тебе удобнее мне кажется.


> Application.Components[i] is TForm

А почему это должно работать вообще? Класс твоей формы какой? TForm1 небось.


ilkz   (2008-01-18 21:40:00) [25]

Osokin - Чушь говоришь, ибо в библиотеке нету TForm1. Мне надо проверить принадлежность объектов списка Components классу TForm.


ilkz   (2008-01-18 21:38:00) [26]

А я и не собираюсь работать над проектом в других средах и языках. Я просил подсказать решение моей проблемы, а не посылать меня использовать то, чего я не знаю.


OSokin   (2008-01-18 21:37:00) [27]

Application.Components[i] is TForm
Может надо "is TForm1"?


DVM   (2008-01-18 21:31:00) [28]

Тем более, что твоя dll все одно может быть использована только в проекте на Delphi.


DVM   (2008-01-18 21:30:00) [29]

Может лучше все же пакеты начать использовать, на dll?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо