一个进程间互相通信的问题: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)会更好一点),谢谢!
发送方(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)会更好一点),谢谢!
解决方案 »
- [C#]richtextbox显示rtf
- C#操作Excel
- 如何建立datarelation?
- web service 用户权限
- 俺是菜鸟..一个简单问题,,50分来抢吧.
- 各位高手快帮帮忙,求一个电子邮箱的正则表达式
- C#(WinFrom)中的TreeView控件,如何使用右击也可选择节点?
- 怎么解决集成reporting service时的身份验证问题,顶贴有分,解决了问题再开帖给500百分,觉得少的话还可以加,反正分还不少:)
- 最近做程序碰到个难题.
- 急,查询3张表,去掉某张表的字段不重复,怎么查询
- A为n行n列二维数组,如何删除第i行第j列,使A变为n-1行n-1列的二维数组
- vs能否发布补丁
所以才采用比较简单一点的字符串来传递,没想也不成功。SendMessage倒是用WM_COPDATA可以。
但根据我的经验
WM_COPDATA肯定可以
(我是指2个独立的应用程序的进程,不是同一个进程之内的2个窗体之间哦),连PostMessage用String都没有成功过。
我错了你也跟着错
我用SendMessage发WM_COPYDATA成功的,WM_COPYDATA只能用SendMessage发,不能用PostMessage的。,但是现在要用PostMessage,不知道该怎么办了。
仅供参考 protected override void DefWndProc(ref Message m)
{
string resut;
switch (m.Msg)
{
case WM_COPYDATA:
resut=GetStringByMsg(m);
..............
}
..............
}
private string GetStringByMsg(Message msg)
{
COPYDATASTRUCT mystr = new COPYDATASTRUCT();
Type mytype = mystr.GetType();
mystr = (COPYDATASTRUCT)msg.GetLParam(mytype);
return mystr.lpData;
}
我指的是2个独立的进程a.exe 和b.exe之间互相通信。
b.exe里获取从a.exe里PostMessage过来的WM_COPYDATA咯
是两个独立的进程,a.exe发送,b.exe接受。
我们那个项目为了确保b.exe能够接受到,在a发送消息之前还要检测b是否启动。
不知道你为什么取不到消息,是不是发送有问题?