这是我的原型:
[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
我没有在 str 中得到 bob。
我认为这一定是因为我在一个线程的堆栈上引用了“bob”字符串,并且该引用在另一个线程的堆栈中绝对没有意义。但如果是这样的话,这些 wparam 和 lparam 指针真的只用于在同一个线程中传递的消息吗?
编辑* 更正:通过线程我的意思是进程。这是在进程而不是线程之间传递字符串的问题。