C# win32 API PostMessage在2个进程间能发送字符串吗?
一个进程间互相通信的问题:PostMessage字符串的传递
代码如下,
发送方(a.exe):
[DllImport("user32.dll",CharSet=CharSet.Auto )]
public static extern int PostMessage(int hwnd, int msg, int wparam, StringBuilder lParam);
PostMessage(345818381, 0x77, 0,new StringBuilder("abcdefg"));
接收方(b.exe):
protected override void DefWndProc(ref System.Windows.Forms.Message m){
switch (m.Msg){
case 0x77:
String info = Marshal.PtrToStringAuto(m.LParam);
break;
}
}
问题,info的结果为空""值,而不是"abcdefg";网上有传说,消息被处理被,"abcefg"的内存已被释放,请问各大侠是怎么回事咯,该怎么传递才能成功传递字符串?
网上苦寻结果,大多是复制来复制去的文章,无具体完整的实例,只好在这里寻求帮助了。
(注:请不要让我改用SendMessae,这里我用PostMessage(或其它发送完消息立即返回的api)会更好一点),谢谢!
------解决方案--------------------
因为PostMessage只是将消息放入对方的消息队列,在对方进程读取到字符串之前也要注意GC会移动字符串的内存,所以应该用Marshal.AllocHGlobal或者Marshal.AllocCoTaskMem为字符串分配空间,对方进程在读取完毕之后最好回发一个消息,发送方收到消息后释放内存。