AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Datenaustausch zwischen 2 Programmen?

Ein Thema von Errraddicator · begonnen am 29. Sep 2008 · letzter Beitrag vom 7. Okt 2008
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#21

Re: Datenaustausch zwischen 2 Programmen?

  Alt 1. Okt 2008, 09:29
Jepp, das sind ja kompatible Datentypen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
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
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#23

Re: Datenaustausch zwischen 2 Programmen?

  Alt 3. Okt 2008, 16:57
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.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Errraddicator

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

Re: Datenaustausch zwischen 2 Programmen?

  Alt 6. Okt 2008, 06:23
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.

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.


Danke im Voraus

cu Patrick
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#25

Re: Datenaustausch zwischen 2 Programmen?

  Alt 7. Okt 2008, 07:53
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.
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#26

Re: Datenaustausch zwischen 2 Programmen?

  Alt 7. Okt 2008, 11:02
Nimm doch ein Stream.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz