虽然目前已经有一些资源网上说解决这个粗略的话题,我还没有发现适合我的答案。
我希望有我的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实现,我并不需要以空字符终止字符串。