发送:
vector<string> vs;
cds.lpData = &vs;
Run Code Online (Sandbox Code Playgroud)
我如何在WM_COPYDATA消息中检索这个,我似乎无法将接收部分中的void指针强制转换为字符串向量.
这是我到目前为止所得到的:
发送:
cds.lpData = &vs;
Run Code Online (Sandbox Code Playgroud)
接收结束:
case WM_COPYDATA:
{
COPYDATASTRUCT *cds = (COPYDATASTRUCT *)lParam;
if(cds->dwData == CDS_TAG)
{
vector<string> * vs;
vs = (vector<string>*)((cds->lpData));
}
}
Run Code Online (Sandbox Code Playgroud)
如何取消引用指向向量的指针?
谢谢!
您可以使用与取消引用任何其他指针的方式相同的方式指向向量:使用*
运算符作为前缀.在你的情况下,*vs
将是你的向量,所以(*vs)[0]
将是第一个元素.
但你领先于自己.该WM_COPYDATA
消息是在进程之间发送数据,但vector
并string
没有你可以在进程间复制和期望的工作类型.您只能使用POD类型,因为Windows要将原始内存从一个进程复制到另一个进程; 它不会调用构造函数或执行内部指针的深层复制.
您需要序列化您的数据结构,因此它是一个连续的内存块.然后,您可以使用该消息将其发送到其他地方.通过反转您要序列化的任何内容来反序列化接收端.