Главная страница
    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.009 c
15-1149064855
0bsid
2006-05-31 12:40
2006.06.25
Delphi уроки $$


2-1149596976
mfender
2006-06-06 16:29
2006.06.25
TWebBrowser: найти и удалить элемент


2-1149760224
kitti
2006-06-08 13:50
2006.06.25
C++Builder


15-1148882161
MsGuns
2006-05-29 09:56
2006.06.25
Трудная победа Шараповой.


3-1146224798
nv
2006-04-28 15:46
2006.06.25
OleContainer сохранение, открытие из/в TBlobField(ClientDataSet)





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