发送:
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));
}
}
如何取消引用指向矢量的指针?
谢谢!
答案 0 :(得分:5)
您将指向向量的指针与解除引用任何其他指针的方式相同:使用*
运算符作为前缀。在您的情况下,*vs
将是您的向量,因此(*vs)[0]
将是第一个元素。
但你领先于自己。 WM_COPYDATA
消息用于在进程之间发送数据,但vector
和string
不是您可以在进程之间复制并期望工作的类型。您只能使用POD类型,因为Windows要将原始内存从一个进程复制到另一个进程;它不会调用构造函数或执行内部指针的深层复制。
您需要序列化您的数据结构,因此它是一个连续的内存块。然后,您可以使用该消息将其发送到其他地方。通过反转您要序列化的任何内容来反序列化接收端。
答案 1 :(得分:0)
发送:
cds.lpData = &vs;
接收:
vector<string> * vs;
vs = (vector<string>*)((cds->lpData));
vs->at(//Whatever element you need to obtain);