Einzelnen Beitrag anzeigen

Tubos

Registriert seit: 25. Feb 2004
Ort: Yspertal (Niederösterreich)
1.014 Beiträge
 
Delphi 7 Personal
 
#1

WM_COPYDATA von C++ nach Delphi

  Alt 17. Sep 2005, 16:38
Hi,

meine C++ - Anwendung schickt per WM_COPYDATA einen String an eine Delphi Applikation.
Leider funktioniert das nicht ganz.

Die relevanten Codeausschnitte:
Delphi:
Delphi-Quellcode:
type
  TMyRecord = packed record
    b: Boolean;
    s: string[255];
  end;
  PMyRecord = ^TMyRecord;

procedure TLoggerForm.WMCopydata(var msg: TWMCopyData);
var
  MyRecord: PMyRecord;
  b: Boolean;
  s: String;
begin
  b := PMyRecord(msg.CopyDataStruct.lpData)^.b;
  s := PMyRecord(msg.CopyDataStruct.lpData)^.s;
  memo1.Lines.Add(s);
   // Daten auswerten/kopieren
   msg.Result := 1; // erhalt bestätigen
end;
C++:
Code:
// In einer Klasse:
static void add(char *msg)
   {
      HWND logwindow = FindWindow("TLoggerForm", "LoggerForm");
      if (logwindow == NULL) MessageBox(0, "mol", "mol", 0);

      COPYDATASTRUCT MyCDS;
      MYREC MyRec;
      StringCbCopy( MyRec.string, sizeof(MyRec.string), msg );
      MyCDS.dwData = NULL;         // function identifier
      MyCDS.cbData = sizeof( MyRec ); // size of data
      MyCDS.lpData = &MyRec;          // data structure
      SendMessage( logwindow,
               WM_COPYDATA,
               (WPARAM)(HWND)NULL,
               (LPARAM) (LPVOID) &MyCDS );
   }
Wenn das C++-Proggie "Ein String" schickt, kommt "n String" an.
Wenn es " EinString EinString EinString EinString" sendet, kommt "EinString EinString EinString Ei" an.

Ich glaube, dass es an der Umwandlung zwischen Delphi-Strings und nullterminierten Strings liegt. Aber müsste das Delphi nicht automatisch machen?

mfg. Tubos
Lukas
  Mit Zitat antworten Zitat