我想从2个CONSOLE应用程序(2个不同的PID,没有Forms!)发送/接收一个字符串。我看到我需要在课堂上宣布这一点。如果在控制台应用程序中没有任何类,可以这样做吗?如果是这样,我该怎么做?WM_COPYDATA在Delphi中没有类
感谢您的帮助。
我想从2个CONSOLE应用程序(2个不同的PID,没有Forms!)发送/接收一个字符串。我看到我需要在课堂上宣布这一点。如果在控制台应用程序中没有任何类,可以这样做吗?如果是这样,我该怎么做?WM_COPYDATA在Delphi中没有类
感谢您的帮助。
您不能使用没有窗口的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,如命名管道,邮筒,套接字等。
小挑剔。这不是一个静态类方法。静态类方法没有隐式的Self参数。通过将静态添加到声明的末尾来制作静态类方法。这是一种类方法。 –
只需从WM_COPYDATA看WM,它是从WindowMessage构建的。所以它实际上是一个消息发送到一个窗口。但不仅TForm是一个窗口。几乎所有可以在显示器上看到的内容都基于一个窗口。这就是为什么MS叫他们的产品Windows; o) –