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

Вниз

DLL для связи двух программ   Найти похожие ветки 

 
MaxxSoft ©   (2006-03-24 11:52) [0]

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

procedure P_PUSK_CALL(WPWnd: HWND);
var
 CashierWnd,
 NewWnd: HWND;
 WC: TWndClass;
 // Процедура обработки сообщений создаваемого окна
 function WindowProc(Wnd: HWND; Msg: Integer; Wparam: WParam; Lparam: LParam): LResult; stdcall;
 var
   Message: TMessage;
 begin
   Result := DefWindowProc(Wnd, Msg, WParam, LParam);
 end;
begin
 // Заполнение шаблона класса
 with WC do
 begin
   style := 0;
   lpfnWndProc := @WindowProc;
   cbClsExtra := 0;
   cbWndExtra := 0;
   hInstance := HInstance;
   hIcon := 0;
   hCursor := 0;
   hbrBackground := 0;
   lpszMenuName := nil;
   lpszClassName := PAnsiChar("InvisibleWnd");
 end;
 // Регистрация класса
 if (RegisterClass(WC) = 0) then
 begin
   ShowMessage("Class not registered...");
   Exit;
 end;
 // Создание окна
 NewWnd := CreateWindow(PAnsiChar("InvisibleWnd"),
                        PAnsiChar("PostPusk"),
                        0, 0, 0, 0, 0, WPWnd, 0, HInstance, nil);
 // Проверка создания окна
 if (NewWnd = 0) then
 begin
   ShowMessage(MSG_DLL_ERROR);
   Exit;
 end;
 // Отправка сообщения WinPost
 SendMessage(WPWnd, WM_WINPOST_MODWNDHANDLE, NewWnd, 0);
end;

В итоге окно не создается, ни с дескриптором родительского, ни с нулем...
Дополнительные вопросы:
1. Как создать окно отдельно от Первого приложения? Или в отдельном потоке?
2. Правильно ли я цепляю к создаваемому окну обработчик сообщений?
3. Второе приложение будет вызывать другую функцию из этой же библиотеки, которой необходимо знать дескриптор ПП, дескриптор невидимого окна и т.п. Где можно хранить эти данные?
Заранее спасибо за ответы...


 
Leonid Troyanovsky ©   (2006-03-24 12:49) [1]


> MaxxSoft ©   (24.03.06 11:52)
 
> Пишу библиотеку для связи двух приложений.


Это самописные приложения?
Почему обязательно сообщениями (messages) ?
Зачем, собс-но, библиотека?

Если первое приложение запускает второе,
то между ними можно организовать anonymous pipe,
что в большинстве случаев гораздо проще.

--
Regards, LVT.


 
MaxxSoft ©   (2006-03-24 12:54) [2]

Приложения не самописные. Интерфейс взаимодействия реализован на сообщениях (согласно документации).


 
MaxxSoft ©   (2006-03-24 13:03) [3]

Нашел вариант создания виртуального окна ф-ией AllocateHWND, не могу разобраться как передать ей процедуру обработки сообщений:

procedure P_PUSK_CALL(WPWnd: HWND);
var
 NewWnd: HWND;
 ModMessages: TWPModMessages;
 procedure WndProc(var Msg: TMessage);
 begin
   case Msg.Msg of
   //
   end;
 end;
begin
 // Регистрация сообщений
 ModMessages := TWPModMessages.Create;
 try
   with ModMessages do
   begin
     RegisterMessageProc(WM_WINPOST_SQLOPEN);
     RegisterMessageProc(WM_WINPOST_SQLEXEC);
     RegisterMessageProc(WM_WINPOST_SQLFREE);
     RegisterMessageProc(WM_WINPOST_MODWNDHANDLE);
     RegisterMessageProc(WM_WINPOST_SETPROP);
     RegisterMessageProc(WM_WINPOST_GETPROP);
     RegisterMessageProc(WM_WINPOST_POST);
     RegisterMessageProc(WM_WINPOST_DETACH);
   end;
 except
   ModMessages.Free;
 end;
 NewWnd := AllocateHWND(WndProc);
 if (NewWnd = 0) then
 begin
   ShowMessage(MSG_DLL_ERROR);
   Exit;
 end;
 SendMessage(WPWnd, ModMessages.FindMessage(WM_WINPOST_MODWNDHANDLE).WPMessageCode, NewWnd, 0);
end;


 
Leonid Troyanovsky ©   (2006-03-24 14:21) [4]


> MaxxSoft ©   (24.03.06 13:03) [3]
> Нашел вариант создания виртуального окна ф-ией AllocateHWND,
>  не могу разобраться как передать ей процедуру обработки
> сообщений:


Она должна быть методом.
Например,

http://www.rsdn.ru/Forum/Message.aspx?mid=883505&only=1

--
Regards, LVT.



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

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

Наверх




Память: 0.48 MB
Время: 0.034 c
5-1133972500
Exile
2005-12-07 19:21
2006.06.25
Компаненты делфи


15-1149012642
Bogdan1024
2006-05-30 22:10
2006.06.25
агенства недвижимости - поделитесь опытом


3-1146032286
jiny
2006-04-26 10:18
2006.06.25
Как передать ссылку на комп.IbDatabase,IbQuery в DLL ?


5-1133960555
ra4fcr
2005-12-07 16:02
2006.06.25
Картинка на BitBtn


1-1148034273
jeka_t
2006-05-19 14:24
2006.06.25
Как "развернуть" нужную ветку TreeView программно?