![]() |
Re: Datenaustausch zwischen 2 Programmen?
Jepp, das sind ja kompatible Datentypen.
|
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:
Server-Awendung
// 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;
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 |
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. |
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 |
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.
|
Re: Datenaustausch zwischen 2 Programmen?
Nimm doch ein Stream.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 Uhr. |
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