Nic*_*ick 5 c# parameters postmessage intptr
这是我的原型:
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern bool PostMessage(int hhwnd, uint msg, IntPtr wparam, IntPtr lparam);
Run Code Online (Sandbox Code Playgroud)
这是我如何使用它:
PostMessage(HWND_BROADCAST, msg, Marshal.StringToHGlobalAuto("bob"), IntPtr.Zero);
Run Code Online (Sandbox Code Playgroud)
在另一个线程中,我可以截获此消息,但是当我尝试使用以下方法取回 bob 时:
string str = Marshal.PtrToStringAuto(m.WParam); // where m = the Message object
Run Code Online (Sandbox Code Playgroud)
我没有得到鲍勃在 str。
我认为这一定是因为我在一个线程的堆栈上引用了“bob”字符串,而该引用在另一个线程的堆栈中绝对没有意义。但如果是这样的话,这些 wparam 和 lparam 指针真的只用于在同一线程中传递的消息吗?
编辑*更正:通过线程我的意思是进程。这是在进程之间传递字符串而不是线程的问题。
无论如何,HGLOBAL 都不再是全球性的了。win16以后就没有了。HWND_BROADCAST 看起来就像您正在将消息发送到不同的进程,而不必介意只是不同的线程。
因此,除非您使用操作系统知道如何封送的标准消息之一,否则您需要将字符串“bob”放置在不同进程可以访问的共享内存区域中。
| 归档时间: |
|
| 查看次数: |
6363 次 |
| 最近记录: |