Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.09;
Скачать: CL | DM;

Вниз

Экспорт переменной в DLL   Найти похожие ветки 

 
Charly22   (2004-02-26 19:33) [0]

Всем доброго времени суток!
Как следует объявлять переменную в своей программе с тем, чтобы ее значение можно было получить из сторонней DLL ?


 
Юрий Зотов ©   (2004-02-26 19:45) [1]

А с какой радости эта сторонняя DLL вдруг начнет получать откуда-то какие-то переменные, если они ей на фиг не нужны?

А если нужны, то в самой DLL должна быть предусмотрена соответствующая функция. Ее и вызывайте.


 
Charly22   (2004-02-26 20:23) [2]

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


 
Palladin ©   (2004-02-26 20:34) [3]

Ну если в этой DLL живет что то живое имеющее окно и очередь сообщений, то SendMessage или куча других способов... если нет никакой очереди сообщений, то DLL это просто набор функций который сам по себе ничего хотеть не может.


 
TUser ©   (2004-02-26 20:38) [4]

Надо вызвать в dll процедуру и ей передавать значение данной переменной. Перед эти процедуру необходимо написать.


 
Defunct ©   (2004-02-26 20:45) [5]

Charly22 (26.02.04 20:23) [2]
> И естественно, в эта DLL будет знать, что ей должно поступить некоторое значение из моей программы.

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


 
Юрий Зотов ©   (2004-02-26 21:04) [6]

> Charly22 (26.02.04 20:23) [2]
> не совсем сторонняя. Эта DLL написана другим человвеком и
> работает вкупе с моей программой. И естественно, в эта DLL
> будет знать, что ей должно поступить некоторое значение из
> моей программы.

Вот уже совсем другой разговор. Навскидку могу предложить три механизма - инициализация, сообщение и callback-функция. Что выбрать - зависит от задачи (по чьей инициаативе происходит передача данных).

1. Инициализация.
DLL содержит набор глобальных переменных и инициализирующую их функцию. Ее и вызывает программа, когда хочет передать в DLL данные. Другие же функции DLL просто используют уже готовые значения этих глобальных переменных.

2. Сообщение.
Когда DLL нуждается в данных, она посылает окну главной программы сообщение (SendMessage) и в ответ получает эти данные. Чтобы DLL знала хэндл окна, заведите в ней глобальную переменную и функцию ее инициализации, которую программа вызовет в самом начале своей работы (первый механизм).

3. Callback.
Программа вызывает некую функцию DLL и в ее параметрах передает адрес СВОЕЙ функции (это и есть callback-функция). При работе этой вызванной функции DLL она производит вызов callback-функции и через нее получает нужные данные.


 
Юрий Зотов ©   (2004-02-26 21:11) [7]

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

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



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

Текущий архив: 2004.03.09;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
1-25804
NPR2
2004-02-25 13:28
2004.03.09
запуск процедуры в определенное время


3-25697
Yrtimd
2004-02-10 18:49
2004.03.09
Как в ehDbGrid узнать, какую запись выбрал пользователь?


6-25840
Skyhawk
2003-12-28 17:01
2004.03.09
COM сервер


14-25901
Layner
2004-02-11 09:17
2004.03.09
Приветствую всех! Помогите достать исходники с книги Н.Культина


3-25688
stud
2004-02-06 11:54
2004.03.09
обработка ошибок interbse