Главная страница
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.5 MB
Время: 0.027 c
3-1092304333
User2
2004-08-12 13:52
2004.09.05
IDENTITY


1-1092730717
ceval
2004-08-17 12:18
2004.09.05
как в Excel сделать заголовок столбца (по середине) и


6-1088668648
Prosto Imya
2004-07-01 11:57
2004.09.05
Как отправить файл без сервера


4-1090515462
AD_infiniTUM
2004-07-22 20:57
2004.09.05
Как рисовать цветом кнопки


4-1090309158
andrey__
2004-07-20 11:39
2004.09.05
Как программно узнать процент Загрузку ЦП