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

Вниз

Экспорт переменной в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
1-25742
denik
2004-02-25 10:09
2004.03.09
Как связать Node`ы в TreeView с MDIChild окнами?


1-25762
Zyb
2004-02-27 08:46
2004.03.09
Антивирусник


4-25973
G A M E R
2004-01-02 03:19
2004.03.09
Меню в играх на WinAPI


14-25879
ИМХО
2004-02-06 23:59
2004.03.09
Александр Беляев - кто он?


8-25834
WondeRu
2003-11-04 11:23
2004.03.09
Глюк!





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