Вот мой прототип:
[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" в стеке одного потока, и эта ссылка абсолютно не имеет значения в стеке другого потока. Но если это так, действительно ли эти указатели wparam и lparam действительно используются только для сообщений, передаваемых в одном потоке?
Редактировать * Исправление: Под потоком я подразумеваю Процесс. Это проблема передачи строки между процессами, а не потоками.