Форум: "Основная";
Текущий архив: 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