当前位置: 首页 > news >正文

在Windows编程中,MFC\C++中如何在OnCopyData中传递Vector类型数据?

我们在通过 WM_COPYDATA 消息实现进程间通信时,发送char 数组或其他类型数组与发送vector是有区别的。

1、发送基础类型时,直接发送指针。

typedef struct tagMYSTRUCT
{int nTest;wchar_t cTest[40] = {0};
} MYSTRUCT, *PMYSTRUCT;MYSTRUCT stSend;
stSend.nTest = 10;
stSend.cTest = "test";COPYDATASTRUCT cds;
cds.dwData = MY_CASE;
cds.cbData = sizeof(OTHERSTRUCT);
cds.lpData = &stSend;SendMessage(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds);

2、发送使用vector时,可以使用 std::vector::data() 获得必要的指针,否则,接收应用程序无法获取它。

std::vector 是使用指针在内部实现的,内存不一定连续,所以不能直接发送它,但可以发送它的数据,因为它保证在内存中是连续的.
可以使用 std::vector::data() 获得必要的指针:

typedef struct tagOTHERSTRUCT
{wchar_t one[40] = { 0 };wchar_t two[20] = { 0 };wchar_t three[20] = { 0 };wchar_t four[4] = { 0 };wchar_t five[3] = { 0 };
} OTHERSTRUCT, *POTHERSTRUCT;

注意:VC++ 对C++ 的支持有些欠缺,所以这个data() 在VS2010 或之前的版本中是不可用的。如果需要,可以将其替换为 :
cds.lpData = &OtherStructList[0];
只要确保 vector 不为空即可。

发送方

std::vector<OTHERSTRUCT> OtherStructList;
......//OtherStructList成员赋值COPYDATASTRUCT cds;
cds.dwData = MY_CASE;
cds.cbData = sizeof(OTHERSTRUCT) * OtherStructList.size();
cds.lpData = &OtherStructList.data();;SendMessage(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds);

接收方

OTHERSTRUCT *begin = static_cast<OTHERSTRUCT*>(pcopydata->lpData);
OTHERSTRUCT *end = begin + pcopydata->cbData / sizeof(OTHERSTRUCT);
//copy the data into a vector, or treat them directly
std::vector<OTHERSTRUCT> recvData(begin, end);
http://www.lryc.cn/news/416337.html

相关文章:

  • Java常见面试题-01-java基础
  • Python爬虫实战:利用代理IP爬取百度翻译
  • Transformer学习之DETR
  • 场外个股期权是什么品种?可以交易哪些品种?
  • 每日学术速递8.5-3
  • C#针对kernel32.dll的一些常规使用
  • 电话营销机器人的优势
  • Oracle SQL Developer 连接第三方数据库
  • OSPF路由协议多区域
  • 8.5 C++
  • MySQL —— 初始数据库
  • 【JVM】垃圾回收机制、算法和垃圾回收器
  • 大数据资源平台建设可行性研究方案(58页PPT)
  • PHP教育培训小程序系统源码
  • 吴恩达机器学习笔记
  • React和Vue3 的 Diff 算法有什么区别
  • 【vulhub靶场之rsync关】
  • 全球7大高质量海外代理IP对比大全
  • 对于原型链的理解
  • Web开发:Vue中的事件小结
  • 基于Springboot的运行时动态可调的定时任务
  • linux perf
  • Linux--网络层IP
  • 浅谈vite之import.meta
  • 【Pytorch实用教程】Pytorch中nn.Sequential的用法
  • Shopify被封?Shopify店铺开店到防封全面指南
  • 11. 盛最多水的容器
  • react如何父子组件传参
  • 【C++】二维数组 数组名
  • 【蘑菇书EasyRL】强化学习,笔记整理