Einzelnen Beitrag anzeigen

Tom-Tom

Registriert seit: 19. Apr 2010
Ort: Remscheid
25 Beiträge
 
#1

Datentransfer zwischen Programmen

  Alt 25. Jan 2019, 16:04
Hallo,

ich versuche, zwischen zwei Delphi Programmen Daten via "BroadcastSystemMessage" zu versenden.

Delphi-Quellcode:

// im FormCreate definiere ich meine Veriable
MSG_SHOW_ADDRESS := RegisterWindowMessage('ShowAddress');

// Hier der Ausschnitt aus der Methode zum Versenden..
var
  dwRecipient : DWord;
begin
  dwRecipient := BSM_APPLICATIONS;
  BroadcastSystemMessage(BSF_POSTMESSAGE, @dwRecipient, MSG_SHOW_ADDRESS, myKndNr, 0);
end;

Auf der Empfängerseite läufts auch geschmeidig mit :

Delphi-Quellcode:
  If Message.Msg = MSG_ADD_ADDRESS
    Then
      ShowMessage (InttoStr(Message.wParam));

Soweit so gut.

Jetzt kommt das Problem:


Eine Intergerzahl zu übertragen ist recht trivial. Kann man das auch mit einem Record machen ?

Die Idee hinter dem Senden:

Delphi-Quellcode:
  T_Adresse = Record
                Keycode : String[20];
                Anrede : String[10];
                Titel : String[30];
                Vorname : String[30];
                Nachname : String[30];
                Adresse2 : String[30];
                Strasse : String[30];
                Hausnr : String[30];
                PLZ : String[10];
                Ort : String[30];
              End;

   P_Adresse= ^T_Adresse;




procedure TForm1.Button2Click(Sender: TObject);
VAR A : P_Adresse;
begin
  New(A);
  A.Keycode := 'SA01-02';
  A.Anrede := 'Frau';
  A.Vorname := 'Maxi';

  Senden (Integer(@A));
end;



procedure TForm1.Senden(X: Integer);
var
  dwRecipient : DWord;
begin
  dwRecipient := BSM_APPLICATIONS;
  BroadcastSystemMessage(BSF_POSTMESSAGE, @dwRecipient, MSG_ADD_ADDRESS, X, 0);
end;

und auf der Empfangenseite:

Delphi-Quellcode:

procedure TForm2.WndProc(var Message: TMessage);
VAR A : P_Adresse;
begin
  if Message.Msg = MSG_ADD_ADDRESS
    then
      Begin
        New(A);
        A := @Message.wparam;
        ShowMessage('ADRESSE HINZUFÜGEN !!!' + A^.Vorname);
      End;
  inherited;
end;
Wie zu erwarten - sonst würde der Post hier nicht stehen - klappt das nicht.

Mir stellt sich hier folgende Frage :

Klappt es nicht, weil ich einen Fehler beim Pointerhandling mache oder kann es evtl. gar nicht funktionieren, da ich zwischen 2 Programmen keinen "Speicherbereich" übergeben kann ?

Für eine Idee wäre ich sehr dankbar !

Tom
  Mit Zitat antworten Zitat