尽管网上已经有一些资源可以解决这个粗略的话题,但我仍然没有找到适合我的答案。
我希望在我的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 示例来发送消息。此示例使用 C# 发送消息,但我只需要这个概念(更不用说将此类代码转换为 VB 是在公园散步)。请注意,在我的 VB 实现中,我不需要用空字符终止字符串。