SendMessage IPC DLL-ből (Delphi)

SendMessage IPC DLL-ből (Delphi)
2013-03-26T11:13:02+01:00
2013-03-26T11:34:24+01:00
2022-10-15T21:46:44+02:00
needback
Sziasztok!

IPC-t szeretnék egy DLL-ből egy másik process főablakába küldeni, ráadásul úgy, hogy a válasz is érdekel. Első gondolatom a SendMessage, mivel nem kell hozzá semmilyen objektum, és tökéletesen alkalmas minden olyan feladatra, amire nekem szükségem lesz.

Sok féle változatot kipróbáltam, de egyikkel se sikerült. Volt aminél a result-ot vissza tudtam adni, a dll-nek, de a dll-ből küldött string nem jött át, és mindig access violation-ba ütközött.

Jelenlegi kódom:
//Program: const WM_MYMESSAGE = WM_USER+847; ... procedure WMSignal(var msg: TMessage); message WM_TGSBRIDGE; ... procedure TMainForm.WMSignal(var msg: TMessage); var p: PChar; s: string; begin p:=PChar(msg.LParam); s:=p; ShowMessage(s); msg.Result:=1256; end; //////////////////////////////////////////////////////////// //DLL: procedure Init(handle: integer); stdcall; var mainwnd: HWND; s: string; begin mainwnd:=FindWindow('TMainForm', nil); s:='Hello world'; ShowMessage(IntToStr(SendMessage(mainwnd, WM_USER+847, handle, Cardinal(@s)))); end;

A fenti kód, de mindegyik más is ott akad el, amikor a pointerből string-et akarok csinálni.

(A fentiben konkrétan az s:=p; sornál száll el, de a s:=string(p); sem működik.)

Próbálkoztam olyannal, hogy record-ba rakom bele az infót, szintén nem ment át.

Volt olyan, hogy nem TMessage típusú adatot adtam át, szintén nem működött.

Eddigi próbálkozásaim alapjai:
SwissDelphiCenter.ch : ...eine Windows Nachricht mit SendMessage senden?
How to Share Data Between Apps in Delphi Using 'WM_COPYDATA'

Fontos lenne string-et átadni. Számmal minden tökéletesen működik, csak a string nem. Ha megoldható record-ként, vagy objektumként, az is jó lenne, de mindenféleképpen string-nek kell benne lennie.

A segítséget előre is köszönöm: Needback
Mutasd a teljes hozzászólást!
És persze megint a topicnyitás utáni 5. percben találom meg a megoldást:
How to Share Data Between Apps in Delphi Using 'WM_COPYDATA'

Kérném a pontokat nullázni.
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd