Как получить строку из запроса SendMessage (внешнего exe) в C ++ - PullRequest
0 голосов
/ 02 июня 2018

У меня есть два исполняемых файла.Я хочу использовать один, чтобы получить строку от другого.Другими словами, я хочу установить InterProcess Communication.
Я пытался SendMessage , используя (char *) lParam in WndProc .Тем не менее, это не работает. (char *) lParam делает ошибку во время выполнения.
Вот часть моего кода:

отправитель SendMessage:

string s="12345";
SendMessage(hwnd,M_WR_SHELL,0,(LPARAM)s.c_str());


получатель SendMessage (в WndProc):

case M_WR_SHELL: {
    string s;
    s=(char*)lParam;
    MessageBox(NULL, s.c_str(),"THAT'S GOOD'",MB_OK);
    return 0;
}


Я искал вопрос.Некоторые ответы звучат так: «Они не разделяют одно и то же пространство памяти».Однако я не знаю, как с этим справиться.
Если использование SendMessage не правильно, как я могу это сделать?

PS: я использую TDM-GCC и не хочу использовать MFC и даже VC ++.Если возможно, пожалуйста, не давайте мне решения через них.; p

Спасибо,
W. Xie

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

Вы должны использовать WM_COPYDATA (самый простой) или совместно используемую память через функции сопоставления файлов .Мой собственный USM может помочь, но, как правило, вам нужно больше времени уделять механизмам IPC, поскольку вы, похоже, пришли из другой ОС (отсюда и примечание о Visual Studio).IPC в Windows - не простая задача.

0 голосов
/ 02 июня 2018

Вам необходимо использовать разделяемую память. Я рекомендую использовать WM_COPYDATA вместо пользовательского сообщения.WM_COPYDATA может быть отправлено только через SendMessage () или SendMessageTimeout (), и Windows позаботится о копировании данных в адресное пространство получающего процесса.

...