虽然已经有
几个
在线资源解决了这个粗糙的话题,但我仍然没有找到适合我的答案。
通过PostMessage发送/接收字符串
我希望有我的VB.net过程和我的C++过程之间的充分沟通。我希望能够将一个字符串发送到从C++程序和,但暂时我需要实现:
发送一个字符串C++过程,并处理它。
这将创建一个我在不确定的几个点,但我会尽量保持这个尽可能简单...
在使用下面的函数声明VB;
Declare Function PostMessage Lib "user32" Alias "PostMessageA" (_
ByVal hWnd As IntPtr, _
ByVal Msg As UInteger, _
ByVal wParam As IntPtr, _
ByVal lParam As String _
) As Boolean
并发送如此的消息;
PostMessage(hWnd, SM_PING, Nothing, "schlampe")
随着用于捕获在C++消息下面的方法声明;
LRESULT CALLBACK newWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
而对于我是否可以访问字符串的测试;
char buffer[50];
sprintf(buffer, "Received: %s", (char *)lParam);
MsgBox(buffer);
我掠过了很多,我认为是没有必要的,但问的细节和必对你发出。
我的问题是,消息是收到和“处理” ...但是C++过程中产生的不包含我的测试邮件的消息框(记载:“收到”)。
那么,我怎样才能发送一个字符串通过PostMessage/SendMessage从VB到C + +?
解决方法:
参见该解决方案的接受的答案......但此外,这里是我收到的字符串(C++):
LRESULT CALLBACK newWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch(uMsg) {
case WM_COPYDATA:
MsgBox("Received a WM_COPYDATA message");
COPYDATASTRUCT * pcds = (COPYDATASTRUCT *)lParam;
LPCTSTR lpszString = (LPCTSTR)(pcds->lpData);
MsgBox(lpszString);
return 1L;
}
return CallWindowProc(instance->OriginalProcessor(), hwnd, uMsg, wParam, lParam);
}
最后,我使用IPC示例here至发送的消息。这个例子使用C#发送消息,但是这个概念是我所需要的(更不用说它是在公园里散步以将这些代码转换为VB)。请注意,在我的VB实现中,我不需要用空字符来终止字符串。
是否需要使用特定的窗口消息?还是在流程之间传递数据的最终目标?对于后者,有[更好的方法](http://en.wikipedia.org/wiki/Inter-process_communication)实现。 – ulidtko
在使用它之前,你可能应该对'COPYDATASTRUCT'进行一些基本的验证。某些恶意应用程序可能会向您发送虚假的'WM_COPYDATA'消息。 – jamesdlin