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

Вниз

как получить доступ к контроллу из dll??   Найти похожие ветки 

 
bloodman ©   (2004-08-22 17:06) [0]

Есть программа на форме listbox . программу загружает dll и мне нужно из dll получить доступ к этому listbox .  Как это можно осуществить.? Пробовал так:
Передавал Handle листбокса,а в dll писал так:
TListBox(FindControl(Handle)).items.add("dfs");
Но появлялся AV :(


 
Юрий Зотов ©   (2004-08-22 19:00) [1]

А что мешает просто передать прямую ссылку на ListBox, без всяких FindControl"ов?

P.S.
Все же для таких вещей лучше использовать BPL, а не DLL. Гораздо проще и надежнее будет. И без дублирования кода.


 
bloodman ©   (2004-08-22 19:49) [2]

понимаю что лучше bpl,но хочется хоть какой-нибуть универсальности.(всмысле не зависеть от версий Delphi)


 
Mim1 ©   (2004-08-22 20:06) [3]


>  [2] bloodman ©   (22.08.04 19:49)

От версий вы все равно будете зависеть, нельзя обращаться к свойствам обьектов в созданых в другой версии Delphi. Результатом будет все тот же AV. Проверено практикой.


 
bloodman ©   (2004-08-22 20:09) [4]

Все Заработало но не совсем как хотелось бы.
У меня функция должна передовать разные типы контроллов в зависимости от ситуации (ListBox, Memo и т.д.).Когда я пишу так:
function CallBack( Create : TCreate ;Func:TCbFuncs):TListBox;
то все работает, но так можно передать только listbox.Как надо написать чтобы можно было передавать все тыпы контролов? Пробовал так:
function CallBack( Create : TCreate ;Func:TCbFuncs):TWinControl.
Говорит Incopatable types .


 
Mim1 ©   (2004-08-22 20:18) [5]

Передавайте tobject. Потом приводите.
var rz:TListBox;
rz := callback(...) as TListBox;

На самом деле будет передан только указатель, какой тип, важно только на этапе разработки.


 
bloodman ©   (2004-08-22 20:20) [6]

это я понимаю. Спасибо. Щас  попробую.


 
bloodman ©   (2004-08-22 20:34) [7]

:( пишет invalid class typecast
на строчке
Lis:=PCallBack(cr,fb) as TListBox;


 
Mim1 ©   (2004-08-22 20:42) [8]

Какой ужас :)
Скажите а вы компилируете c BPL или всетаки пошли другим путем?


 
Mim1 ©   (2004-08-22 20:45) [9]

Может получится что в разных модулях программы (exe и dll) разные экземпляры класса TListBox. Тогда и будет проявлятся такая ошибка, избежать можно явным приведением (без проверки), что нерекомендуется. Или использованием одного экземпляра указанного обьекта. (То есть размещением этого класса в BPL).


 
Mim1 ©   (2004-08-22 20:47) [10]

Как вариант можно отказаться от всего что присуще DElphi в интерфейсах между модулями. Использования обьектов переменных типа string и т.п. Тогда вы не только не будете зависить от версии Delphi но и вообще от языка програмирования.


 
bloodman ©   (2004-08-22 20:52) [11]

Как вариант можно отказаться от всего что присуще DElphi в интерфейсах между модулями

Этого я и хотел изначально , но что - то не получилось.

Скажите а вы компилируете c BPL или всетаки пошли другим путем?
Нет не bpl . Пока dll.
Это можно исправить ведь если указывать TListBox то все работает.


 
Mim1 ©   (2004-08-22 20:57) [12]


> Это можно исправить ведь если указывать TListBox то все
> работает.

Самоцетируюсь.

> избежать можно явным приведением (без проверки), что нерекомендуется


 
bloodman ©   (2004-08-22 21:04) [13]

Спасибо. А почему с as не хочет?


 
Юрий Зотов ©   (2004-08-22 22:22) [14]

> bloodman ©   (22.08.04 20:34) [7]
> пишет invalid class typecast на строчке
> Lis:=PCallBack(cr,fb) as TListBox;

Вот это и есть последствия использования DLL. С BPL такого не было бы.

> bloodman ©   (22.08.04 21:04) [13]
> А почему с as не хочет?

EXE и DLL компилируются независимо друг от друга. Поэтому класс в EXE и тот же самый класс в DLL - это, с формальной точки зрения, два РАЗНЫХ класса. Вот AS и не работает.


 
Mim1 ©   (2004-08-23 05:08) [15]

- Рядовой, из чего сделан корпус пистолета Макарова?
- Из стали, товарищ майор
Майор достает из под стола книгу - Правильно из стали
- А из чего сделан ствол пистолета Макарова?
- Из стали, товарищ майор
Достает книгу, смотрит - Неправильно, из того же материала



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

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

Наверх




Память: 0.51 MB
Время: 0.041 c
1-1092999796
3APA3A
2004-08-20 15:03
2004.09.05
Корректное уничтожение форм, созданных в runtime...


14-1092426242
Паскальные надписи
2004-08-13 23:44
2004.09.05
Приступ болезни "оптимизация" - типы


1-1093208613
JohnJ
2004-08-23 01:03
2004.09.05
Парадокс или моя невнимательность?


1-1092940959
NeVIP
2004-08-19 22:42
2004.09.05
Бешеный StringGrid


3-1091022678
Pioneer
2004-07-28 17:51
2004.09.05
DOS кодировка в TDBF