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