2012-11-15 36 views
2

我想从2个CONSOLE应用程序(2个不同的PID,没有Forms!)发送/接收一个字符串。我看到我需要在课堂上宣布这一点。如果在控制台应用程序中没有任何类,可以这样做吗?如果是这样,我该怎么做?WM_COPYDATA在Delphi中没有类

感谢您的帮助。

+1

只需从WM_COPYDATA看WM,它是从WindowMessage构建的。所以它实际上是一个消息发送到一个窗口。但不仅TForm是一个窗口。几乎所有可以在显示器上看到的内容都基于一个窗口。这就是为什么MS叫他们的产品Windows; o) –

回答

11

您不能使用没有窗口的WM_COPYDATA发送给。如果您不使用类,则必须直接使用Win32 API RegisterClass()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机制,不依赖于Windows,如命名管道,邮筒,套接字等。

+2

小挑剔。这不是一个静态类方法。静态类方法没有隐式的Self参数。通过将静态添加到声明的末尾来制作静态类方法。这是一种类方法。 –

相关问题