Einzelnen Beitrag anzeigen

API

Registriert seit: 18. Apr 2004
637 Beiträge
 
#1

Daten von C# an Delphi senden

  Alt 30. Jun 2014, 05:45
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;
  Mit Zitat antworten Zitat