如何从CopyDataStruct中检索向量?

时间:2014-03-18 02:38:56

标签: c++ winapi

发送:

 vector<string> vs;
 cds.lpData = &vs;

我如何在WM_COPYDATA消息中检索此内容,我似乎无法将接收部分中的void指针强制转换为字符串向量。

到目前为止,我提出的是:

发送:

 cds.lpData = &vs;

接收结束:

 case WM_COPYDATA:
{
    COPYDATASTRUCT *cds = (COPYDATASTRUCT *)lParam;
    if(cds->dwData == CDS_TAG)
    {

   vector<string> * vs;
   vs = (vector<string>*)((cds->lpData));

    }
}

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

谢谢!

2 个答案:

答案 0 :(得分:5)

您将指向向量的指针与解除引用任何其他指针的方式相同:使用*运算符作为前缀。在您的情况下,*vs将是您的向量,因此(*vs)[0]将是第一个元素。

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

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

答案 1 :(得分:0)

发送:

cds.lpData = &vs;

接收:

 vector<string> * vs;
    vs = (vector<string>*)((cds->lpData));
    vs->at(//Whatever element you need to obtain);