Announcement

Collapse
No announcement yet.

Record als Message verschicken

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Record als Message verschicken

    Hallo,<p>
    eine Kinderfrage. Folgende Message bekomme ich von einer anderen Anwendung zugesendet:
    <pre>
    const
    PM_RecDataMsg = WM_APP + 110;
    <p>
    type
    PRecDataMsg = ^TRecDataMsg;
    TRecDataMsg = packed record
    Msg: Cardinal;
    Dialog: Boolean;
    Option: Boolean;
    Netzwerk: Boolean;
    end;
    <p>
    begin
    ...
    PostMessage(hTargetWnd, PM_RecDataMsg, 110, LongInt(@RecDataMsg));
    ...
    end;
    </pre>
    Egal was ich versucht habe, um die Nachricht auszuwerten, ich habe immer nur "Müll" erhalten. Hat jemand eine Idee?

  • #2
    Du *musst* WM_COPYDATA benutzen. Der Zeiger den du versendest zeigt natuerlich in den Adressraum der sendenden Applikation. Die empfangende Applikation hat ihren eigenen Adressraum an dem dort natuerlich nur Muell steht. Fuer WM_COPYDATA kopiert Windows die Daten von einem Adressraum zum anderen

    Comment


    • #3
      Davon abgesehen verwendest Du PostMessage(), wenn die Message bei der anderen Anwendung eintrifft wurde in Deiner Anwendung schon längst wieder die aktuelle procedure verlassen. Wurde der Record als lokale Variable in dieser procedure definiert, so ist auch dieser Record schon längst wieder zerstört wurden. Im günstigsten Falle greift die andere Anwendung NUR auf Datenmüll aus dem Stack der anderen Application zu.<br>
      Um Daten zu verschicken bietet sich wm_CopyData an, unter NT/2000 kann man auch von einem Process heraus Speicher für den anderen Process allozieren, den Record dort reinkopieren und dann eine registrierte Message absetzen mit dem Handle auf diesen Speicherbereich.<br>
      Unter allen Windows Versionen gibts dann noch die MMF, Memory Mapped Files, die generell Prozessübergreifen gelesen und geschrieben werden können.<br>
      Ein anderer Umweg wird über die OLE/COM/ActiveX ermöglicht.<br>
      Zum Schluß bleiben dann noch die Wege über Dateien, die Registry, INI Files oder sogar Datenbanken.<br>

      Gruß Hage

      Comment

      Working...
      X