Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1092735261
Aleksandr.
2004-08-17 13:34
2004.09.05
Непонятная утечка памяти


1-1092823928
EvgeniyR
2004-08-18 14:12
2004.09.05
TreeView


3-1092032920
Korvin
2004-08-09 10:28
2004.09.05
Изменение списка полей в TTable


4-1089953351
Сергей Ю.
2004-07-16 08:49
2004.09.05
"Снятие" экрана


11-1080324581
user
2004-03-26 21:09
2004.09.05
перестали срабатывать новодобавленные события





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский