Как мне создать собственное сообщение Windows, которое передает любые данные в другую программу.
Я обмениваюсь сообщениями между GUI-программой и серверной программой. Мой опыт в * nix-программировании, и я немного заблудился в мире Windows.
В настоящее время обе программы создаются мастером Visual Studio, выбрав «Оконное приложение MFC». Теперь я хочу элегантный способ общения между программами. Google дает мне Cwnd-> sendmessage + регистрацию ваших собственных сообщений и т. Д. Однако я не могу передать указатель на символ в другую программу со стандартными пользовательскими сообщениями (ну, я могу, но область памяти неверна, и программа segfaults). Итак, Google снова дает мне sendmessage (WM_COPYDATA, hparam, lparam), который распределяется. Когда гуглил маршаллинг ... я врезался в стену.
Я предполагаю, что маршаллированные сообщения (или их данные) передаются в общую область памяти, которая доступна для чтения только отправителю и программе-получателю (верно?). И, создав пользовательское сообщение с указателем маршалированных данных в виде lparam, я могу передать любой объект другой программе (правильно?). Как мне это сделать на практике? Я попробовал следующее:
pWin->SendMessage(pTargetWin, WM_CUSTOM_MESSAGE, pSourceWin, pData);
Выше работает, если pData является целым числом. Если pData является указателем на объект, я не могу использовать объект из-за отсутствия маршаллинга. Я знаю, что могу сделать обертку COPYDATASTRUCT для pData и изменить ее на WM_COPYDATA. Должен ли я сделать это вместо этого?
ш,
Юха