这是我的原型:
在不同的线程中,我可以拦截这条消息,但是当我尝试使用以下语句获取bob时:
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern bool PostMessage(int hhwnd, uint msg, IntPtr wparam, IntPtr lparam);
以下是我如何使用它:
PostMessage(HWND_BROADCAST, msg, Marshal.StringToHGlobalAuto("bob"), IntPtr.Zero);
在不同的线程中,我可以拦截这条消息,但是当我尝试使用以下语句获取bob时:
string str = Marshal.PtrToStringAuto(m.WParam); // where m = the Message object
我不明白如何将字符串“bob”转换成字符串。
我认为这可能是因为我在一个线程的堆栈上引用了“bob”字符串,而在另一个线程的堆栈上该引用没有任何意义。但如果是这样的话,那么这些wparam和lparam指针只有在传递消息到同一线程时才真正被使用吗?
编辑* 更正:我所说的“线程”实际上是“进程”。这是在进程之间传递字符串的问题,而不是在线程之间。