Надо передать из dll в другую программу строку данных, пишу на WinAPI, передаю так: dll:
| Код | var cd: TCopyDataStruct; s: PChar; wnd: HWND;
begin wnd:=FindWindow('MONITOR', nil); s:='My dear window i sent the message'; cd.dwData:=2048; cd.cbData:=Length(s)+1; cd.lpData:=s; SendMessage(wnd,WM_COPYDATA, 0 ,longint(@cd)); end.
|
Программа:
| Код | function WndMessageProc(hWnd: HWND; Msg: UINT; WParam: WPARAM; LParam: LPARAM): UINT; stdcall; var str:pchar; ... WM_COPYDATA: case PCopyDataStruct(LParam)^.dwData of 2048: begin move(PCopyDataStruct(LParam)^.lpData,str,PCopyDataStruct(LParam)^.cbData); MessageBoxA(0, Pchar(str),Pchar(inttostr(Length(str))),0); end; end;
|
Программа вроде нормально получает строку, выдает ее в MessageBox, а потом выскакивает окно c Runtime error 216 и программа вылетает. В чем может быть проблема? |