Einzelnen Beitrag anzeigen

Errraddicator

Registriert seit: 26. Jun 2008
161 Beiträge
 
Delphi 2007 Professional
 
#22

Re: Datenaustausch zwischen 2 Programmen?

  Alt 1. Okt 2008, 14:52
So, hab jetzt den halben bis ganzen Tag gebastelt, mein Programm mit Funktionalität ausgestattet, reichlich dazu gelernt, das Ganze zum Laufen bekommen und habe natürlich kurz vor Schluss wieder 1 Problem:
Die Rückgabe der verarbeiteten Daten vom Client zum Server.

Das Problem hatte ich Heute Morgen schomma:
Client sendet die Daten weg (dort sind sie korrekt) und am Server kommen diese "kaputt" an.
Dann wurde mir ja geraten, anstatt die Daten in einer Klasse in einem Record zu speichern und dieses dann weg zu schicken.
Das funktioniert dann auch.

Mein Problem ist jetzt:
Die Daten die ich zurück send möchte, kommen aus einer "Standardfunktion" die ich von mehreren Programmen nutze und jetzt nich ma so eben von Klasse auf Record umprogrammieren kann, da das auch div. andere Programme betreffen würde.

Also wie schaffe ich es, dass ich über SendMessage auch Klassen und nicht nur Records verschicken kann?
Oder geht sowas gar nicht?


Zur Info
Client-Anwendung
Delphi-Quellcode:
// sends the given client-struct to the server
procedure TfrmClient.ipcReturnClient(struct: TClient);
var
  dataStruct: TCopyDataStruct;
  hServerWnd: HWND;
  logMsg: String;
begin
  try
    // build copy-struct
    dataStruct.dwData := IPC_MSG_RETURN_OUTPUT;
    dataStruct.cbData := SizeOf(struct);
    dataStruct.lpData := struct; // um die Struktur geht es

    // get server-window
    hServerWnd := FindWindowEx(0, 0, nil, PChar(SERVER_TITLE) );
    if hServerWnd <> 0 then
      SendMessage(hServerWnd, WM_COPYDATA, Longint(self.Handle), Longint(@dataStruct) ); // hier ist die Struktur noch ok
  except
    on e: Exception do
    begin
      logMsg := 'Fehler bei Rücksendung des Mandanten: ' + e.Message;
      ipcSendStatus(logMsg);
    end;
  end;
end;
Server-Awendung
Delphi-Quellcode:
// processes the given returned output
procedure TfrmServer.ipcProcessReturnedOutput(dataStruct: PCopyDataStruct);
var
  clientStruct: TClient;
begin
  clientStruct := dataStruct.lpData; // hier ist die Struktur dann kaputt
  if clientStruct <> nil then
  begin
    returnList.Add(clientStruct);
  end;
end;

Danke nochmals

Patrick
  Mit Zitat antworten Zitat