12306网站是阿里做的,我是新手如何做跨境电商,地推怎么做最有效,wordpress订阅者我们在通过 WM_COPYDATA 消息实现进程间通信时#xff0c;发送char 数组或其他类型数组与发送vector是有区别的。
1、发送基础类型时#xff0c;直接发送指针。
typedef struct tagMYSTRUCT
{int nTest;wchar_t cTest[40] {0};
} MYSTRUCT, *PMYSTRUCT;MYSTRUCT stSend;
s…我们在通过 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::vectorOTHERSTRUCT 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_castOTHERSTRUCT*(pcopydata-lpData);
OTHERSTRUCT *end begin pcopydata-cbData / sizeof(OTHERSTRUCT);
//copy the data into a vector, or treat them directly
std::vectorOTHERSTRUCT recvData(begin, end);