Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.445 Beiträge
 
Delphi 12 Athens
 
#4

AW: Wie sicher ist wm_copydata

  Alt 18. Mai 2022, 15:34
Ich habe vor einer Weile mal ein paar Wrapperklassen rund um diese Problematik geschrieben. Da ist es zwar der Server, der die Strings versendet, aber vielleicht kannst du davon ja was abgucken.

Hier der Interface Part (komplette Projektgruppe im Anhang):
Delphi-Quellcode:
unit IPCMessaging.Types;

interface

uses
  Winapi.Messages, Winapi.Windows,
  System.Classes, System.SysUtils, System.Generics.Collections;

type
  TDataMessageEvent = procedure(Sender: TObject; const AValue: string) of object;

type
  TIPCMessagingListener = class
  private const
    cUnregister = 0;
    cRegister = 1;
    cBroadcast = 2;
  private
    FClientMessageID: Cardinal;
    FServerMessageID: Cardinal;
    FWindowHandle: HWND;
  strict protected
    procedure HandleClientMessage(ASender: HWND; AData: Integer); virtual;
    procedure HandleDataMessage(ASender: HWND; const AValue: string); virtual;
    procedure HandleServerMessage(ASender: HWND; AData: Integer); virtual;
    procedure SendClientMessage(ARecipient: HWND; AData: Integer);
    procedure SendDataMessage(ARecipient: HWND; const AValue: string);
    procedure SendServerMessage(ARecipient: HWND; AData: Integer);
    procedure WndProc(var Msg: TMessage);
  public
    constructor Create;
    destructor Destroy; override;
  end;

  TIPCMessagingServer = class(TIPCMessagingListener)
  private
    FClientHandles: TList<HWND>;
    FData: string;
    procedure SetData(const Value: string);
  strict protected
    procedure HandleClientMessage(ASender: HWND; AData: Integer); override;
    procedure SendData;
  public
    constructor Create;
    destructor Destroy; override;
    property Data: string read FData write SetData;
  end;

  TIPCMessagingClient = class(TIPCMessagingListener)
  private
    FOnDataMessage: TDataMessageEvent;
    FServerHandle: HWND;
  strict protected
    procedure DataMessage(const AValue: string); virtual;
    procedure HandleDataMessage(ASender: HWND; const AValue: string); override;
    procedure HandleServerMessage(ASender: HWND; AData: Integer); override;
  public
    constructor Create;
    destructor Destroy; override;
    property OnDataMessage: TDataMessageEvent read FOnDataMessage write FOnDataMessage;
  end;

implementation
Angehängte Dateien
Dateityp: zip IPCMessaging.zip (107,5 KB, 26x aufgerufen)
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat