进程间通信,使用WM_COPYDATA消息在两个程序间传递字符串,有问题。 进程间通信 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个主要还是自己调试.1, sendmessage 和 postmessage.2. 能不能找到要接收消息的窗口; 接收端 是否能接受到消息; 消息中附带的数据能否正常解析. 长见识了,从来没用过这种方式进行进程间通信。我一般使用共享内存、命名管理和Socket。 问题是出在接收端“CopyDataStruct vCopyDataStruct = (CopyDataStruct)Marshal.PtrToStructure( m.LParam, typeof(CopyDataStruct));” Out of Memory,但是我不知道为什么会出现这样的问题。 用BSTR是错的。因为BSTR指针指向的字符串前面有长度信息(就是那个05 00 00 00): BSTR指针 | v05 00 00 00 'h' 'e' 'l' 'l' 'o' 00当WM_COPYDATA帮你把数据(BSTR指针指向的数据)拷贝到其他进程时,只会拷贝'hello\0',并不会把前置长度05 00 00 00拷贝过去。当目标进程还原BSTR时,‘'hello\0'前面可以是任意的垃圾,比如长度变成789272521等。这可能导致你内存溢出或非法访问。 WinForm中如何判断Ctrl键是否被按下。 FlashVars datagrid 与滚动条的关系 C# Socket 关闭服务,如何关闭当前已经连接的socket 如何将大tatable赋值给一个dataset里面的表 +++++++++++++++ 如何关闭一个Session??? +++++++++++ C# winform 事件 DES加密后解密老是多出几个乱码,救急! 客户端向服务器请求数据失败,求高手解答 表名怎么传进去? SQL数据库里的图像字段绑定问题 C#做的程序怎么打包呀?(做成安装程序)
1, sendmessage 和 postmessage.
2. 能不能找到要接收消息的窗口; 接收端 是否能接受到消息; 消息中附带的数据能否正常解析.
m.LParam, typeof(CopyDataStruct));” Out of Memory,但是我不知道为什么会出现这样的问题。
|
v
05 00 00 00 'h' 'e' 'l' 'l' 'o' 00
当WM_COPYDATA帮你把数据(BSTR指针指向的数据)拷贝到其他进程时,只会拷贝'hello\0',并不会把前置长度05 00 00 00拷贝过去。
当目标进程还原BSTR时,‘'hello\0'前面可以是任意的垃圾,比如长度变成789272521等。这可能导致你内存溢出或非法访问。