C#和C++之间通过WM_COPYDATA互相传递数据结构
前言:今天真心忍不住要写这篇博客了,原因很简单,前几天在做这方面的通信,调试了好久,各种bug,也是第一次在C#和C++之间通过SendMessage传递数据结构,不知道怎么弄,去度娘了几十篇博客,要么就是文不对题,要么就是残章断句,要么就是互相copy,越看越烦,问题也一时半会儿解决不了,于是冷静下来想想,再好好找找,果然找到了一片我想要的思绪,于是调试调试,终于ok了,今天也是整理下分享出来,希望对你们的疑惑有所帮助……
好了,吐槽完了,言归正传:
介绍: WM_COPYDATA 是Window API发送消息的标志宏,用于本机不同进程之间的通信(当然,本机进程通信有很多种方式,这只是其中之一,至于各自的优缺点这里就不赘述了)
强调一点:发送WM_COPYDATA 消息是进程阻塞的,意思就是调用SendMessage(WM_COPYDATA )时代码是不往下执行的,要等消息发送完毕了,才返回继续执行(具体的解释请参照MSDN官方文档),本人测试了下,无论WM_COPYDATA 是否发送成功都返回0,这尼玛与文档矛盾???所以各位还得亲测一下才行哦!
<一>C++端发送与接收:
1. 发送:(这里无耻的copy下网上通用的代码,难的手动敲了,你们懂得)
- #include <windows.h>
- #include <time.h>
- #include <conio.h>
- #include <stdio.h>
- int main()
- {
- const char szDlgTitle[] = "RecvMessage";
- HWND hSendWindow = GetConsoleWindow ();
- if (hSendWindow == NULL)
- return -1;
- HWND hRecvWindow = FindWindow(NULL, szDlgTitle);
- if (hRecvWindow == NULL)
- return -1;
- char szSendBuf[100];
- time_t timenow;
- COPYDATASTRUCT CopyData;