Einzelnen Beitrag anzeigen

delphifan2004

Registriert seit: 26. Nov 2004
Ort: Dresden
274 Beiträge
 
Delphi 10.3 Rio
 
#8

Re: WM_COPYDATA zwischen Delphi- und Freepascalprogramm

  Alt 13. Feb 2010, 12:50
Hallo @implementation,

Danke, so klappt es mit der Übertragung. Der Treffer erscheint. Wie ich es haben wollte!

Wie aber kann ich jetzt meine Daten empfangen?

Die NewWindowProc ist ja nicht als Formularmethode definiert.

Deshalb habe ich das hier versucht:

Delphi-Quellcode:
function NewWndProc(Handle: hWnd; Msg: LongWord; wParam, lParam: Longint): Longint; stdcall;
var
  wMessage: TMessage; //Msg,wParam,lParam in TMessage-Struktur
  wmCopyDataMessage: TWMCopyData; //die benötigte TWMCopyData-Struktur
begin
  if Msg = WM_COPYDATA then begin
    showmessage('Treffer');
    if Assigned(Server) then
      //=== Das hier funktioniert nicht === Compiler sagt Argument cant' assigned to ===
      //hier will ich meine WMCopyData() Methode aufrufen, die die Message
      //mit meinen Daten übernimmt, um diese Daten verarbeiten zu können.
      //with Server do
      //WMCopyData(ConvertMessage(CopyMessage(Msg, wParam, lParam)));
      

    //ABER SO HIER FUNKTIONIERT DIE DATENÜBERTRAGUNG PERFEKT:::
    with Server do
    begin
      wMessage := CopyMessage(Msg, wParam, lParam);
      wmCopyDataMessage := ConvertMessage(wMessage);
      with GDBDebugServer do
      WMCopyData(wmCopyDataMessage);
    end;
    //==========================================================
  end else
    Result := CallWindowProc(WProc, Handle, Msg, wParam, lParam);
end;

function TServer.CopyMessage(Msg: LongWord; WParam, LParam: Longint
  ): TMessage;
begin
  Result.msg:=Msg;
  Result.wParam:=WParam;
  Result.lParam:=LParam;
end;

function TServer.ConvertMessage(const Msg: TMessage): TWMCopyData;
begin
  move(msg, result, sizeof(TMessage));
end;

Danke Euch allen für Eure Hilfe!!!


@grl: Habe die Änderung in win32Callback.inc übernommen und die LCL neu übersetzt!

Wer also das Beispiel hier nachvollziehen will, muss die genannte Änderung in win32CallBack.inc (siehe Beitrag von @grl) vorher vornehmen und dann die LCL neu übersetzen!
  Mit Zitat antworten Zitat