Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.12.05;
Скачать: [xml.tar.bz2];

Вниз

Взаимодействие DLL между собой и с EXE   Найти похожие ветки 

 
AlexandrN   (2002-11-23 11:59) [0]

Привет всем, кто сейчас присутствует...
Программеры помогите мне...
У меня есть EXE(основная прога), который динамически грузит некий набор DLL.
Если кто знает или предпологает, то подскажите как правильно можно вызвать функции(процедуры) загруженные основной прогой из разных DLL в любой из загруженных DLL.
Типа :
Загрузили MyDLL и TestDLL, в основной программе.
Вызываем из MyDLL функции которые реализованы в TestDLL.

А так же кто нибудь знает, как из любой динамически загружаемой DLL, получить доступ к компонентам расположенным в основной программе.

P.S. >> Огромное спасибо всем кто ответит...


 
Cobalt   (2002-11-23 13:19) [1]

1)Из "любой" не получиться. Она должна быть под это заточена. Т.е. либо она должна получать некий callback-адрес, либо, скажем, имя ДЛЛ-ки и имя ф-ии требуемого ей типа
2)Вопрос, конечно, должен звучать так: "Как из моей длл-ки получить доступ к компонентам из моей проги?"


 
AlexandrN   (2002-11-23 13:27) [2]

Согласен по поводу "Как должен звучать вопрос", но спасибо и на том...

Закрыаю тему, вопроса так как решение уже нашлось, с людьми обитающими на RSDN...


 
Юрий Зотов   (2002-11-23 13:27) [3]

Функция DLL спокойно может вызвать функцию из другой DLL через обычное GetProcAddress (а если требуется, то и загрузить эту DLL обычным LoadLibrary). Все точно так же, как и при вызове из Exe.


 
AlexandrN   (2002-11-23 13:31) [4]

>Юрий...
Зачем мне грузить повторно DLL, если они все грузяться при инициализации EXE.
А вот про GetProcessAddres - который может вызвать функцию из другой DLL, которая уже загружена, мог бы пояснить, каким это образом...
Передавать, чтоли весь список загруженных функций(даже с ненужными) или как.


 
Юрий Зотов   (2002-11-23 13:42) [5]

Предположим, я пишу DLL, а в ней вызываю API-шную CreateWindow. Все нормально, никакого криминала, верно? А ведь CreateWindow - это функция из User32.dll. И системе абсолютно без разницы, кто эту dll написал - Microsoft или мы с Вами.

Вот и поступите так же. Если нужна статическая загрузка - напишите для Ваших DLL свой интерфейсный модуль по образцу Windows.pas и используйте этот модуль в Exe, в DLL и вообще где угодно.

Если же нужна динамическая загрузка, то используйте стандартный механизм: GetProcAddress и вызов с приведением типа к нужному.


 
AlexandrN   (2002-11-23 13:46) [6]

Но я же загружаю все DLL в EXE и там же инициализупую функции.
А мне бы хотельсь после этого, просто вызывать уже загруженные функции в других DLL где надо..

И загружаю, я DLL - динамически.


 
Юрий Зотов   (2002-11-23 13:53) [7]

> А мне бы хотельсь после этого, просто вызывать уже загруженные
> функции в других DLL где надо..

Ну и вызывайте себе преспокойно, самым обычным образом.

1. LoadLibrary
Если DLL уже загружена, повторной загрузки не произойдет, функция просто вернет ее хэндл. Можно использовать и GetModuleHandle, получите тот же хэндл.

2. GetProcAddress

3. Вызов с приведением типа.

Все точно так же, как Вы делаете в Exe. Никакой разницы.


 
AlexandrN   (2002-11-23 14:04) [8]

Разницы никакой если, в DLL импортировать все типы данных и описания объектов используемых в другий DLL или EXE, чего делать очень нехочется...


 
Anatoly Podgoretsky   (2002-11-23 14:07) [9]

Лень что ли?


 
AlexandrN   (2002-11-23 14:09) [10]

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


 
Юрий Зотов   (2002-11-23 14:11) [11]

Ну так а что же Вы хотели, батенька? Конечно, DLL должна знать то, с чем она работает.

Но! Если Вы все равно грузите все DLL разом, то почему бы не использовать статическую загрузку? Тогда один (или не один, это неважно) интерфейсный модуль решает все проблемы.


 
AlexandrN   (2002-11-23 14:14) [12]

Полностью с вами согласен.
Но решение уже нашёл.


 
Юрий Зотов   (2002-11-23 14:14) [13]

Еще вариант (наверное, лучший). Поместите все совместно используемые типы, объекты и прочее в BPL, а Exe и все DLL компилируйте с этим run-time пакетом.


 
AlexandrN   (2002-11-23 14:14) [14]

Полностью с вами согласен.
Но решение уже нашёл.

Все принимавшим участие большое спасибо.


 
NailS   (2002-11-25 13:53) [15]


> AlexandrN (23.11.02 14:14)
> Но решение уже нашёл.

Так поделись решением-то.
Или это комерческая тайна ? ;)



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

Форум: "Основная";
Текущий архив: 2002.12.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.009 c
14-14774
Anar
2002-11-13 17:12
2002.12.05
У меня вопрос по Flash


1-14532
php
2002-11-26 16:25
2002.12.05
Files on Host


14-14815
Bboy tn
2002-11-14 23:16
2002.12.05
Ничего не понимаю в мониторах SAMSUNG


7-14842
max2057
2002-10-05 09:21
2002.12.05
С чего начинается Родина или Как выключаются Windows


3-14403
IgorokS
2002-11-14 16:45
2002.12.05
как используя Delphi и MySQL заставить данный запрос работать?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский