これが私のプロトタイプです:
[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);
別のスレッドでこのメッセージをインターセプトできますが、次を使用してボブを取り戻そうとすると:
string str = Marshal.PtrToStringAuto(m.WParam); // where m = the Message object
私はstrでボブを取得しません。
これは、あるスレッドのスタックで「bob」文字列を参照し、その参照が別のスレッドのスタックではまったく意味をなさないという事実によるものだと考えています。しかし、その場合、これらの wparam および lparam ポインターは、同じスレッドで渡されるメッセージに対してのみ実際に使用されますか?
編集* 訂正: スレッドとは、プロセスを意味します。これは、スレッドではなく、プロセス間で文字列を渡す際の問題です。