Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Datenaustausch zwischen 2 Programmen? (https://www.delphipraxis.net/121512-datenaustausch-zwischen-2-programmen.html)

DeddyH 1. Okt 2008 09:29

Re: Datenaustausch zwischen 2 Programmen?
 
Jepp, das sind ja kompatible Datentypen.

Errraddicator 1. Okt 2008 14:52

Re: Datenaustausch zwischen 2 Programmen?
 
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

sirius 3. Okt 2008 16:57

Re: Datenaustausch zwischen 2 Programmen?
 
Du müsstest die Klasse in einen Stream schreiben und dann den Stream versenden.

Das geht entweder indem die Klasse so eine Funktion (classtostream) selber implementiert. Ansonsten gibt es noch die Streamingklassen (imho TReader+TWriter) von Delphi, welche aber nur published properties beachten.

Errraddicator 6. Okt 2008 06:23

Re: Datenaustausch zwischen 2 Programmen?
 
Morgen!

Ok, behalte ich mal im Hinterkopf.

Hab das Programm jetzt eh erst ma auf normalem Wege fertig gemacht, denn die Liste musste so allmählich fertig werden und ob das Programm jetzt 4 oder 2 Minuten rennt is ja nun nich soooo der Faktor bei einmaligen Listen. :D

Ging ja bisher erst mal hauptsächlich um das Testen von solchen Methodiken und da bot sich das kleine Programm halt grade an. ^^

...

Kann mir jemand, damit ich das Ganze in Zukunft richtig mache, nen gutes Tutorial o. Ä. für Named Pipes / Memory Mappings empfehlen?

Hoffe, dass ich dann auch nich mehr so viel nerven muss wie letzte Woche. :D :D :D


Danke im Voraus

cu Patrick

mquadrat 7. Okt 2008 07:53

Re: Datenaustausch zwischen 2 Programmen?
 
Nochmal zu Klasse vs. Record. Du könntest deiner Klasse theoretisch auch einen Adapter mitgeben, der die Werte dann als Record zurückgibt. Dann müsstest du nur die sendende Routine ändern. Alle alten Methoden können ja dann ohne Probleme auf der Klasse arbeiten. Hätte auch noch den charmanten Vorteil, dass du selektiv zurückgeben kannst, falls du mal Elemente in der Klasse hast, die nicht übertragen werden sollen / können.

Dezipaitor 7. Okt 2008 11:02

Re: Datenaustausch zwischen 2 Programmen?
 
Nimm doch ein Stream.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz