Форум: "Основная";
Текущий архив: 2004.09.05;
Скачать: [xml.tar.bz2];
Внизкак получить доступ к контроллу из 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.039 c