Moin,
Von einer C#-Applikation soll mittels WM_COPYDATA Daten an eine Delphi Anwendung geschickt werden.
WMCOPYDATA kommt in der Delphi Anwendung schon mal an, doch werden die Werte nicht übermittelt. Sehr wahrscheinlich liegt es am Delphi TMyStruct
Record, welcher zum c# struct nicht kompatibel ist.
Vielen Dank im Voraus für eure Hilfe.
Sender:
Code:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
internal struct MyStruct
{
public int Number;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string Message;
}
// .....
myStruct.Number = 1234;
myStruct.Message = "hello";
int myStructSize = Marshal.SizeOf(myStruct);
IntPtr pMyStruct = Marshal.AllocHGlobal(myStructSize);
try
{
Marshal.StructureToPtr(myStruct, pMyStruct, true);
COPYDATASTRUCT cds = new COPYDATASTRUCT();
cds.cbData = myStructSize;
cds.lpData = pMyStruct;
NativeMethod.SendMessage(hTargetWnd, WM_COPYDATA, NativeMethod.GetForegroundWindow(), ref cds);
}
Empfänger:
Delphi-Quellcode:
type
TMyStruct = packed record
Number: integer;
Msg: string[255];
end;
PMyStruct = ^TMyStruct;
procedure TfrmHelper.WMCOPYDATA(var msg: TWMCopyData);
var
MyRecord: PMyStruct;
s: String[255];
Number: integer;
begin
s := PMyStruct(msg.CopyDataStruct.lpData)^.Msg;
Number := PMyStruct(msg.CopyDataStruct.lpData)^.Number;
ShowMessage('Msg ' + s + ' Number: ' + IntToStr(Number));
end;