![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Каким образом получить доступ объекту DLL'ки к объекту главного п [D7, Win2k]
GrowlmonizeR © (2004-06-20 11:06:00)Приветствую Вас всех! У меня имеет место быть следующий вопрос. Заранее извиняюсь за его корявую постановку. В нашей команде программистов, я пишу на PL/SQL, и к дельфям редко прикладываюсь. Вопрос в следующем: Есть главное приложение, которое сканирует на наличие DLL'ок директорию и подключает их. Каким образом получить доступ объекту DLL'ки к объекту главного приложения, а точнее к его свойствам.
evvcom (2004-06-20 19:32:00) [1]
> к объекту главного приложения, а точнее к его свойствам
А зачем собственно? С объектами exe пусть сам exe и работает. То же касается и dll. А уж если что из самой dll надо поменять, так или посылать сообщения, или через интерфейсы (COM, OLE, ActiveX). Меньше проблем будет.
jack128 (2004-06-20 14:31:00) [2]
> а не в курсе на счёт дублирования Application в EXE и в
> DLL?
Нет, не в курсе. Сам я не часто c DLL дело имею, а если и имею, то без VCL.
default (2004-06-20 14:01:00) [3]jack128 © (20.06.04 13:54) [4]
ааа...а не в курсе на счёт дублирования Application в EXE и в DLL?зачем это понадобилось...
jack128 (2004-06-20 13:55:00) [4]
> вот и получается, что у нас код этого модуля будет скомпилирован и
> в EXE
буффер обмена засорился :-)
jack128 (2004-06-20 13:54:00) [5]
> jack128 © (20.06.04 12:30) [2]
> пояcни пункт a) (
unit uMyTestClass
interface
type
TTest = class(TObject)
public
procedure SameProcedure();
...
end;
implementation
procedure TTest.SameProcedure;
begin
...
end
для того чтобы использовать класс TTest в Dll - нужно подключить модуль uTestClass, вот и получается, что у нас код этого модуля Магнезия и в EXE(в котором мы, собственно и реализуем функциональность класса) и в DLL(тут нам посути нужен только интерфейс класса).
default (2004-06-20 13:40:00) [6]jack128 © (20.06.04 12:30) [2]
пояcни пункт a) (
jack128 (2004-06-20 12:30:00) [7]
> Передать указатель на этот объект в DLL. Не забыть про модуль
> sharemem.
это не есть гуд по двум причинам
а) дубляж кода в dll и в основном приложении
б) накладываются некоторые ограничения на объект (не возможность использования операторов is/as и тд)
есть два возможных варианта решения проблемы
1) вынести объект в пакет и соответственно компилировать dll и exe с рантайм пакетами
2) объявить interface, описывающий интерфейс (уж извени за карявость фразы :-)) объекта и передовать в длл этот интерфейс.
Хотя если объект маленький и не сложный, то можно и способом DrPass'a воспользоваться..
DrPass (2004-06-20 12:07:00) [8]Передать указатель на этот объект в DLL. Не забыть про модуль sharemem.