2

2 つの CONSOLE アプリケーション (フォームのない 2 つの異なる PID) から文字列を送受信したいと考えています。これをクラスで宣言する必要があることがわかりました。コンソールアプリケーションでクラスをまったく持たずにこれを行うことは可能ですか? もしそうなら、どうすればそれを行うことができますか?

ご協力いただきありがとうございます。

4

1 に答える 1

11

WM_COPYDATA送付先窓口がないとご利用いただけません。クラスを使用しない場合は、Win32 APIRegisterClass()CreateWindow/Ex()関数を直接使用してウィンドウを割り当て、メッセージ ハンドラー プロシージャに独自のスタンドアロン関数を提供する必要があります。

しかし、クラスを使用しないのはなぜですか? 次に、RTL の組み込みメッセージ ハンドラー システムを活用できます。少なくとも、AllocateHWnd()静的クラス メソッドで使用できるため、実行時にクラス オブジェクトをインスタンス化する必要はありません。

type
  TWindowMessages = class
  public
    class procedure WndProc(var Message: TMessage);
  end;

class procedure TWindowMessages.WndProc(var Message: TMessage);
begin
  //...
end;

var
  Wnd: HWND;

Wnd := AllocateHWnd(TWindowMessages.WndProc);
// pump the message queue for new messages as needed...
DeallocateHWnd(Wnd);

これがニーズに合わない場合は、名前付きパイプ、メールスロット、ソケットなど、ウィンドウに依存しない別の IPC メカニズムを検討する必要があります。

于 2012-11-15T02:00:30.830 に答える