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

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.06.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.013 c
1-1147859129
Damager
2006-05-17 13:45
2006.06.25
Интерфейс программ


2-1149362980
barzini
2006-06-03 23:29
2006.06.25
Дипломная. БД. Хелп.


3-1146039439
Сергей А.
2006-04-26 12:17
2006.06.25
Как вызвать хранимую функцию


2-1149502986
новик
2006-06-05 14:23
2006.06.25
преобрпзование типов int64 в int


15-1148894966
ольга
2006-05-29 13:29
2006.06.25
Delphi+AutoCad





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