Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.13;
Скачать: CL | DM;

Вниз

Обращение к TAction в DLL   Найти похожие ветки 

 
GarryFV   (2003-10-01 19:20) [0]

Суть в следующем:

Есть в программе кнопка и я хочу присвоить ей Action, находящийся в динамически подключаемой dll.

Создается и присваивается все нормально, но не изменяются некоторые свойства кнопки, которые изменяются, если Action в основном модуле. Например, Caption, Hint... Но все-таки Action отрабатывает при нажатии кнопки.

А вот если назначить этот Action пункту меню, то при нажатии (вызов метода Action.Execute) появляется бред в виде Exception - Invalid Typecast.

C ShareMem все нормально - специально посмотрел в ProcessViewer-e юзается ли эта самая borlndmm.dll.

Причем смотрел RTTI объектов TAction созданных в основной форме и в DLL, типа:

var
ac: TAction;
ti: PTypeInfo;
td: PTypeData;

...

ac := Action1; // Action1 или в форме или в dll
ti := ac.ClassInfo();
td := getTypeData(ti);

При просмотре структуры в отладчике td^.r jбъекты в обоих случаях одинаковые за исключением одной вещи:

ClassType: TAction - для Action из формы и
ClassType: TClass($адрес) для Action из Dll

Но если взять TClass($адрес).ClassName, говорит : TAction.

Если кто-нить разбирается во внутренностях VCL, напишите, plz,в чем дело.


 
VAleksey ©   (2003-10-02 11:53) [1]

Пополнее код длл.
Я сделал тестовый пример у меня все отображается ;-) и капшен и хинт ....


 
me   (2003-10-02 13:15) [2]

Один и тот же класс в аппликации и DLL суть 2 разных класса, поэтому и RTTI работает "неправильно". Решение - сборка всего с run time packages


 
garryfv   (2003-10-02 15:14) [3]

ПРобовал и с run-time (и основной модуль и BPL разумеется), т.е. таблица классов одна (должна быть) - exception-а нет, но все равно ничего не работает...


 
GarryFV   (2003-10-02 15:41) [4]

Вот, что получилось.

Если передать в DLL форму из основного приложения и там создать Action с этим Owner-ом, то и действительно все работает :).

А я пытался в DLL создать Action и привязать его к форме в основном приложении, причем был вариант - пересылал в DLL Application и создавал Action с Owner=Application - не работало.

Усем бАльшой Тханкс!



Страницы: 1 вся ветка

Текущий архив: 2003.10.13;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.02 c
3-40292
chesh
2003-09-19 13:07
2003.10.13
Поиск с помощью Seek (AdoTable) по dbf таблице


1-40428
AndrewK
2003-10-01 14:49
2003.10.13
Получение True или False по выражению в строке


7-40706
Calm
2003-07-26 16:34
2003.10.13
Вывод сообщения поверх всех-всех окон. Не умрут ли игрушки?


8-40527
Mike19
2003-06-10 20:18
2003.10.13
Wave In


4-40744
LOX
2003-08-06 16:16
2003.10.13
диалог выбора папок