如何从CopyDataStruct中检索向量?

moo*_*234 0 c++ winapi

发送:

 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)

如何取消引用指向向量的指针?

谢谢!

Rob*_*edy 5

您可以使用与取消引用任何其他指针的方式相同的方式指向向量:使用*运算符作为前缀.在你的情况下,*vs将是你的向量,所以(*vs)[0]将是第一个元素.

但你领先于自己.该WM_COPYDATA消息是在进程之间发送数据,但vectorstring没有你可以在进程间复制和期望的工作类型.您只能使用POD类型,因为Windows要将原始内存从一个进程复制到另一个进程; 它不会调用构造函数或执行内部指针的深层复制.

您需要序列化您的数据结构,因此它是一个连续的内存块.然后,您可以使用该消息将其发送到其他地方.通过反转您要序列化的任何内容来反序列化接收端.