有关WM_COPYDATA的帮助 [英] Help with WM_COPYDATA

查看:82
本文介绍了有关WM_COPYDATA的帮助的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,我正准备使用wm_copydata在2个应用程序之间进行通信.

我不确定如何使用COPYDTASTRUCT通过HWND.

Hello all, I am tring to communicate between 2 applications using wm_copydata.

I am not sure how to pass HWND using COPYDTASTRUCT.

HWND hWnd = FindWindow(NULL, "Advisor");
	if (hWnd)
	{
/////Sending Application.
		COPYDATASTRUCT cds;
		ZeroMemory(&cds, sizeof(COPYDATASTRUCT));
		cds.dwData = WM_CREATE;
		cds.lpData = (HWND)ResulthWnd;
		cds.cbData = sizeof(ResulthWnd);
		SendMessage(hWnd,WM_COPYDATA,(WPARAM)ResulthWnd,(LPARAM)&cds);
         }

////////Receiving Application
switch (pCopyDataStruct->dwData)
	{
	case WM_CREATE:
         HWND SenderWnd = (HWND)pCopyDataStruct->lpData;
break;
         }




有人可以帮忙吗?

在此先感谢.




Can someone please help.

Thanks in advance.

推荐答案

成员cds.lpData应该是指针(LPARAM)&ResultWnd(请修正世界结果"中的拼写错误),而不是.

我想指出的是,在两个不同进程之间交换数据是什至在NT技术之前创建的传统Windows API的产物,而不是主流的OS功能.实际的多进程系统中的进程应该是隔离的,并且只能通过IPC(例如套接字)进行通信.因此,WM_COPYDATA既不安全也不可靠.您需要对此做出谨慎的决定,并考虑其他选择.这种方法表面上的简单性可能非常诱人.

另请参见:
http://www.flounder.com/wm_copydata.htm [使用WM_COPYDATA在.NET和MFC之间进行进程间通信 [ ^ ].

—SA
The member cds.lpData should be a pointer, (LPARAM)&ResultWnd (please fix the typo in the world "Result"), not HWND.

I would like to note, that exchanging data between two different processes is the artifact of the legacy Windows API created even before NT technology and is not a mainstream OS feature. The processes in real multi-process systems are supposed to be isolated and communicating only via IPC, such as sockets. So, WM_COPYDATA is neither safe not robust. You need to make a careful decision about it and consider alternative. The apparent simplicity of the approach could be very deceiving.

See also:
http://www.flounder.com/wm_copydata.htm[^],
Interprocess Communication Between .NET and MFC Using WM_COPYDATA[^].

—SA


这篇关于有关WM_COPYDATA的帮助的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆