![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TFrame в Dll
gVisio © (2005-10-26 12:14:00)как вызвать Frame из DLL и поместить его на форму???
BFG9k (2005-10-26 12:43:00) [1]clickmaker :
Ну наконец-то. Сейчас попробуем.
clickmaker (2005-10-26 12:37:00) [2]
> gVisio © (26.10.05 12:14)
> как вызвать Frame из DLL и поместить его на форму???
собссно ниче сложного. Но есть несколько требований
1. И Exe и DLL должны быть собраны с одними и теми же runtime пакетами.
2. В DLL нужно передать Application из Exe и присвоить его апликэйшену длл
3. То же для Screen
А дальше пишешь экспортируемую ф-ию, где создаешь фрейм, возвращаешь указатель на него. А в экзе уже делай с ним, что хочешь. На форму положить - значит Frame.Parent := Form
BFG9k (2005-10-26 12:33:00) [3]Придется немного помучаться, коллега :)
Я использовал пакеты (Packages), они генерируют bpl. Экземпляр TFrame должен быть создан внутри пакета с помощью экспортируемой функции, которая и вернет его в основную программу. Объявлять экспортируемую функцию можно в любом модуле пакета. Далее действовать также, как и с dll (LoadPackage,GetProcAddress,UnloadPackage).
Грабли:
1. В основном проекте должен быть включен флаг Build With Runtime packages (Options-Packages)
2. Все вызываемые методы и объекты должны быть описаны как в основной программе, так и в пакете. Причем вызываемые методы фрейма должны быть virtual.
3. Уничтожать экземпляры фрейма лучше тоже внутри пакета.
4. Разные пакеты не должны содержать одноименных модулей (с этим я занимаюсь сексом конкретно сейчас).