发送端:
HWND hwnd = GetSafeHwnd();
HWND hwndParent = ::GetParent(hwnd);
if(hwndParent != NULL)
{
Message_Param * msg = new Message_Param;
msg->nMsgType = htons(AS_CHAT);
strcpy( msg->userData, UserData);
COPYDATASTRUCT MyCDS;
MyCDS.dwData = htons(AS_CHAT);
MyCDS.cbData = sizeof(Message_Param);
MyCDS.lpData = &msg;
::SendMessage(hwndParent, WM_COPYDATA, (WPARAM)(HWND)hwnd, (LPARAM)(LPVOID)&MyCDS);
}
接收端:
PCOPYDATASTRUCT pMyCDS;
pMyCDS = (PCOPYDATASTRUCT)pCopyDataStruct;
Message_Param * msg = new Message_Param;
msg = (Message_Param *)pMyCDS->lpData;
其中:
typedef struct _Message_Parm{
int nMsgType;
char userData[200];
}Message_Param;问题是:
这样写对吗?程序抛错。不知道是哪里的问题?
我跟踪进去发现:MyCDS.lpData 这个里存放一个指针,但不是msg的地址。
HWND hwnd = GetSafeHwnd();
HWND hwndParent = ::GetParent(hwnd);
if(hwndParent != NULL)
{
Message_Param * msg = new Message_Param;
msg->nMsgType = htons(AS_CHAT);
strcpy( msg->userData, UserData);
COPYDATASTRUCT MyCDS;
MyCDS.dwData = htons(AS_CHAT);
MyCDS.cbData = sizeof(Message_Param);
MyCDS.lpData = &msg;
::SendMessage(hwndParent, WM_COPYDATA, (WPARAM)(HWND)hwnd, (LPARAM)(LPVOID)&MyCDS);
}
接收端:
PCOPYDATASTRUCT pMyCDS;
pMyCDS = (PCOPYDATASTRUCT)pCopyDataStruct;
Message_Param * msg = new Message_Param;
msg = (Message_Param *)pMyCDS->lpData;
其中:
typedef struct _Message_Parm{
int nMsgType;
char userData[200];
}Message_Param;问题是:
这样写对吗?程序抛错。不知道是哪里的问题?
我跟踪进去发现:MyCDS.lpData 这个里存放一个指针,但不是msg的地址。
解决方案 »
- mfc 树形控件的子节点有id吗?如果有的话怎样得到?
- 文件过滤驱动中的一些问题
- 请问大牛门 哪个比较权威的说法 举例下 UDP 是否 需要用IOCP
- DLL编程,error C2065: 'dllexport' : undeclared identifier错误
- 100分求"VC6下读写EXCEL"的代码~~~
- 我获得了其他程序中的List的CWnd,如何通过CWnd操作另一个程序的List项?
- 如何把ListCtrl逆时针转90度,放在窗体上!!
- 如何在内存中形成链表
- 请教,在DLL Com组件中如何得到HINSTANCE句柄
- 关于服务的一些疑惑
- 如何进行编码转换
- 程序运行一段时间以后,内存增长了400K左右,不知道具体是什么原因
pMyCDS = (PCOPYDATASTRUCT)pCopyDataStruct;
Message_Param * msg = (Message_Param *)pMyCDS->lpData;
你不能NEW 一份出来, 直接用传过来的就行了, 两端不同很正常, 因为不是同一个进程.操作系统会在接收消息的进程内重新分配空间的.发送也不对: Message_Param * msg = new Message_Param; // 不需要new 分配的
msg->nMsgType = htons(AS_CHAT);
strcpy( msg->userData, UserData);
COPYDATASTRUCT MyCDS;
MyCDS.dwData = htons(AS_CHAT);
MyCDS.cbData = sizeof(Message_Param);
MyCDS.lpData = &msg;
::SendMessage(hwndParent, WM_COPYDATA, (WPARAM)(HWND)hwnd, (LPARAM)(LPVOID)&MyCDS);
}
pMyCDS = (PCOPYDATASTRUCT)pCopyDataStruct;
Message_Param * msg = new Message_Param;
msg = (Message_Param *)pMyCDS->lpData;//上一句才new了内间,这里在干嘛,应该是memcpy( msg, pMyCDS->lpData, sizeof(pMyCDS);吧
而且,接收端接收的
msg = (Message_Param *)pMyCDS->lpData;//msg值不对。
我觉得在发送端就可能不对
MyCDS.lpData = &msg;//这里lpData的值就不是msg的地址。
那是直接
Message_Param * msg;
msg->nMsgType = htons(AS_CHAT);
strcpy( msg->userData, UserData);不对吧??