我想从2个CONSOLE应用程序发送/接收一个字符串(2个不同的PID,没有表单!)。我看到我需要在课堂上声明这个。是否可以在控制台应用程序中完全没有类的情况下执行此操作?如果是这样,我该怎么做?
感谢您的帮助。
答案 0 :(得分: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机制,例如命名管道,邮件槽,套接字等。