Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2011, 19:35   #1
like_cloud
Пользователь
 
Аватар для like_cloud
 
Регистрация: 09.12.2009
Сообщений: 29
По умолчанию передача данных из/в DLL

доброго времени суток,господа.

пишу программку с использованием dll. В самой dll находится некоторая функция, реагирующая на события в винде и посылающее сообщение в программу,если происходит необходимое событие. Поразмыслив,решил что лучше всего будет реализовать это не через функцию,которая возвращает значения в программу,а через Postmessage(). Собственно в postmessage() надо указать handle формы, которой передаем сообщение (т.е. той же форме,что и вызвала dll). Возникает 2 вопроса:

как в dll передать handle формы? Предполагаю,что через функцию,т.е. примерно так:

код программы:
Код:
....
var
MyFunction (MYhandle:Thandle) : function : boolean;
....
begin
....
MYHANDLE:=Form.Handle;
MyFunction:=nil;
MYDLL:=LoadLibrary('MYDLL.dll');
   if   MYDLL>=32 then  begin
        @MyFunction:=GetProcAddress(MYDLL,'GetHandle');
          if @MyFunction<>nil then
          MyFunction(MYHANDLE);
....
end;
код dll:
Код:
....
var
MyHandle:THandle;
....
function GetHandle(:THandle):boolean;stdcall;export;
begin
  MyHandle:=MHNDL;
  result:=true;
end;
т.е. утрированно из программы мы вызываем функцию GetHandle в dll и через аргумент это функции передаем handle формы в dll. Но компилятор ругается на то,как я объявил функцию MyFunction в коде самой программы. Как правильно это сделать? Понимаю,вопрос слегка глуповат,но гугл меня не привел к ответу.


второй вопрос: предположим у приложения,вызвавшего dll нет формы. Как тогда передать сообщение в программу ведь handle по сути нет?
like_cloud вне форума Ответить с цитированием
Старый 17.11.2011, 19:46   #2
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Вродк так надо:
Код:
type TMyFunction = function(MYhandle:Thandle): boolean;
var f: TMyFunction;
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 17.11.2011, 19:48   #3
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
компилятор ругается на то,как я объявил функцию MyFunction в коде самой программы
Код:
...
function MyFunction (MYhandle:Thandle): Boolean; external 'Mydll';

var
  Form1: TForm1;
...
Как получить хэндл окна консольного приложения
http://www.rsdn.ru/article/qna/ui/conhandl.xml
mihali4 вне форума Ответить с цитированием
Старый 18.11.2011, 09:20   #4
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Как тогда передать сообщение в программу ведь handle по сути нет?
Не использовать оконные сообщения. Они не для этого предназначены.

Простой callback не устроит?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 20.11.2011, 08:42   #5
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Что значит "передать в DLL чего-то там"? формулировка неверная заранее. Правильнее реализовать в дллке не функцию, а класс, и в конструкторе передавать хэндл окна как параметр. Но правильно сказали, что и в этом случае класс из длл не сможет перехватывать сообщения, ведь посылаются они окну. В этом случае логично создать в приложении callback-метод перехвата всех сообщений форме, который будет ретранслировать их в метод класса из длл на обработку.
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вспомогательная форма в DLL. Передача данных. Arkuz Общие вопросы Delphi 7 16.04.2011 13:05
Передача StringGrid в DLL Adamrus Общие вопросы Delphi 7 30.11.2009 21:46
передача фрейма из dll BESS Компоненты Delphi 1 20.04.2009 18:54
Передача данных из VC++ DLL в Delphi App Kosoglaz Общие вопросы C/C++ 2 05.02.2008 10:53
Передача данных(массива) через DLL. acorables Общие вопросы Delphi 4 05.02.2007 13:16