c++ - 如何从 CopyDataStruct 中检索 vector ?

标签 c++ winapi

发送:

 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 消息用于在进程之间发送数据,但是 vectorstring 不是您可以在进程之间复制并期望工作的类型。您只能使用 POD 类型,因为 Windows 会将原始内存从一个进程复制到另一个进程;它不会调用构造函数或进行内部指针的深度复制。

您需要序列化您的数据结构,使其成为一个连续的内存块。然后您可以使用该消息将其发送到其他地方。通过反转序列化操作在接收端反序列化。

关于c++ - 如何从 CopyDataStruct 中检索 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22469381/

相关文章:

c++ - 让 svn diff 在提交期间显示 C++ 函数

从资源生成的 C++/Win32 对话框行为不正常

c# - 设置 WM_KEYDOWN lParam 参数

c - WIN32 内存宏与 cstring 内存操作之间的区别?

c++ - 重载括号运算符赋值

c++ - 当需要数组时,将指针传递给 vector 中的第一个元素是否安全?

c++ - C++ 中的双感叹号 (!!) 是否会占用更多 CPU 时间?

c++ - 为什么在使用初始化语法时不调用转换运算符,为什么 clang 错误消息看起来不对?

c++ - 枚举所有设备路径

windows - 如何计算 GetModuleFileName 的完整缓冲区大小?