发送:
vector<string> vs;
cds.lpData = &vs;
我如何在 WM_COPYDATA 消息中检索它,我似乎无法将接收部分中的 void 指针转换为字符串 vector 。
这是我到目前为止的想法:
已发送:
cds.lpData = &vs;
接收端:
case WM_COPYDATA:
{
COPYDATASTRUCT *cds = (COPYDATASTRUCT *)lParam;
if(cds->dwData == CDS_TAG)
{
vector<string> * vs;
vs = (vector<string>*)((cds->lpData));
}
}
如何解引用指向 vector 的指针?
谢谢!
最佳答案
您可以像取消引用任何其他指针一样取消指向 vector 的指针:在它前面加上 *
运算符。在您的情况下,*vs
将是您的 vector ,因此 (*vs)[0]
将是第一个元素。
但是你已经超前了。 WM_COPYDATA
消息用于在进程之间发送数据,但是 vector
和 string
不是您可以在进程之间复制并期望工作的类型。您只能使用 POD 类型,因为 Windows 会将原始内存从一个进程复制到另一个进程;它不会调用构造函数或进行内部指针的深度复制。
您需要序列化您的数据结构,使其成为一个连续的内存块。然后您可以使用该消息将其发送到其他地方。通过反转序列化操作在接收端反序列化。
关于c++ - 如何从 CopyDataStruct 中检索 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22469381/