Citat:
sojic:
Znači, mene zanima kako da servis i klijent komuniciraju.
Jednostavno resenje ti je pomocu prozora (HWND) za komunikaciju:
Code:
//
// slanje strukture (poruke) event prozoru CommWindowHandle
//
var
event: TMyEvent;
...
GlobalMemoryHandle := GlobalAlloc(GHND, SizeOf(event));
if GlobalMemoryHandle = 0 then
raise Exception.Create('GlobalAlloc: Unable to allocate memory block');
try
GlobalMemoryPtr := GlobalLock(GlobalMemoryHandle);
try
Move(event, GlobalMemoryPtr^, SizeOf(event));
finally
GlobalUnlock(GlobalMemoryHandle);
end;
PostMessage(CommWindowHandle, WM_IPC_EVENT, 0, GlobalMemoryHandle);
except
GlobalFree(GlobalMemoryHandle);
end;
//
// obrada poruke
//
procedure TMyApp.WndProc(var Message: TMessage);
var
GlobalMemoryHandle: HGLOBAL;
pEvent: ^TMyEvent;
begin
case Message.Msg of
WM_IPC_EVENT:
begin
GlobalMemoryHandle := Message.LParam;
pEvent := pointer(GlobalLock(GlobalMemoryHandle));
try
// Do the event
OnEvent(pEvent^);
finally
GlobalUnlock(GlobalMemoryHandle);
GlobalFree(GlobalMemoryHandle);
end;
end;
end;
end;
BTW...
API na kome radim sluzi za transport poruka preko TCP-ja izmedju dve aplikacije, koje mogu biti i na razlicitim platformama, npr. Palm <-> C#.NET, ili PocketPC <-> Delphi/Win32.
U tvom slucaju bi se u obe aplikacije (servis i eksterni program) dodao unit sa definicijom i handlovanjem poruka i kreirao MsgClient objekat koji se konektuje na standalone messaging server aplikaciju.
Trenutno postoji podrska samo za C++ / Windows / Windows CE, ali uskoro bi trebao da dobije i Delphi unite kao i podrsku za druge platforme.
API je u alpha fazi, ali radi :) Ako neko zeli da ucestvuje u testiranju, moze da downloaduje sa donjeg sajta.
http://www.fortmobile.com/products.html