![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Приложение и DLL [D7, WinXP]
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?