发送:
vector<string> vs;
cds.lpData = &vs;如何在WM_COPYDATA消息中检索这个信息,我似乎无法将接收部分中的空指针转换为字符串向量。
以下是我到目前为止得出的结论:
已发送:
cds.lpData = &vs;接收端:
case WM_COPYDATA:
{
COPYDATASTRUCT *cds = (COPYDATASTRUCT *)lParam;
if(cds->dwData == CDS_TAG)
{
vector<string> * vs;
vs = (vector<string>*)((cds->lpData));
}
}如何取消指向向量的指针?
谢谢!
发布于 2014-03-18 04:39:10
引用指向向量的指针,就像取消引用任何其他指针一样:在它前面加上*运算符。在您的示例中,*vs将是您的向量,因此(*vs)[0]将是第一个元素。
但你已经超越了你自己。WM_COPYDATA消息用于在进程之间发送数据,但是vector和string不是您可以在进程之间复制并期望工作的类型。您只能使用POD类型,因为Windows将原始内存从一个进程复制到另一个进程;它不会调用构造函数,也不会对内部指针进行深度复制。
您需要序列化您的数据结构,因此它都是一个连续的内存块。然后您可以使用该消息将其发送到其他地方。反序列化接收端的反序列化。
发布于 2014-03-19 02:37:48
发送:
cds.lpData = &vs;接收:
vector<string> * vs;
vs = (vector<string>*)((cds->lpData));
vs->at(//Whatever element you need to obtain);https://stackoverflow.com/questions/22469381
复制相似问题