::Отправить сообщение( )

LRESULT result = ::SendMessage(hWnd, s_MaxGetTaskInterface, (WPARAM)&pUnkReturn, 0);

Значение результата после звонка 0

Я ожидаю, что он вернется с допустимым значением pUnkReturn, но он вернется со значением NULL.

Необходимая информация перед звонком:

const UINT CMotionUtils::s_MaxGetTaskInterface =  RegisterWindowMessage(_T("NI:Max:GetTaskInterface"));

Значение s_MaxGetTaskInterface, которое я получаю, составляет 49896.

Значение hWnd также правильное. Я проверил это с помощью Spy ++ (инструмент Visual Studio).

Окно сообщений Microft Spy ++ показывает мне следующее для этого окна.

<00001> 009F067C S message:0xC2E8 [Registered:"NI:Max:GetTaskInterface"]wParam:0224C2D0 lParam:00000000
<00002> 009F067C S message:0xC2E8 [Registered:"NI:Max:GetTaskInterface"]lResult:00000000

Пожалуйста, помогите мне получить действующий адрес, сохраненный в pUnkReturn после звонка.

Действительно ли адресат hWnd обрабатывает сообщение? это было бы хорошее место, чтобы посмотреть и проверить возвращаемое значение в отладчике

geocoin 19.09.2008 14:27

Определенно нужна дополнительная информация, как видно из ответов.

Kris Kumler 19.09.2008 16:19
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
1 038
6

Ответы 6

Когда я поискал в Google NI:Max:GetTaskInterface, я ничего не нашел. В общем, то, как окно будет обрабатывать данное сообщение, полностью зависит от соответствующего окна. Окно (указанное hWnd) даже поддерживает сообщение NI:Max:GetTaskInterface?

Вам нужно будет предоставить дополнительную информацию - что такое "GetTaskInterface" (Google не дает результатов). SendMessage вернет значение, возвращаемое WndProc, который обрабатывает сообщение «s_MaxGetTaskInterface». Если он не обработан, вы вернете ноль, и ваш указатель по-прежнему будет NULL.

Вам нужно будет рассказать нам, что такое pUnkReturn и как он определяется.

Вам также нужно будет сообщить нам, что ожидает обработчик s_MaxGetTaskInterface.

Если вы ожидаете, что обработчик заполнит все, на что указывает pUnkReturn, вам нужно будет вызвать SendMessage с помощью (WPARAM) pUnkReturn, однако, если обработчик вернет указатель, вызовите, как вы делаете сейчас.

Я думаю, что нужен & in & pUnkReturn, исходя из венгерского префикса. Я ожидаю, что pUnkReturn будет иметь тип IUnknown *. Получатель сообщения предоставит IUnknown *. Адрес, по которому будет храниться IUnknown *, является IUnknown **. Следовательно, этот код передает & pUnkReturn, а получатель сообщения записывает в * (IUnknown **) wParam.

Целевой hWnd находится в том же процессе? В противном случае вы не сможете передать (или вернуть) указатель в сообщении. Обратите внимание, что Windows реализует маршаллинг для встроенных сообщений.

Проблема не в том, как вы вызываете SendMessage (). Проблема заключается в вашей реализации обработчика сообщений для зарегистрированного сообщения "NI: Max: GetTaskInterface".

Значение, возвращаемое функцией SendMessage (), совпадает со значением, возвращаемым обработчиком сообщений. Если вам нужно, чтобы pUnkReturn был out-val, ваш обработчик сообщений должен заполнить его.

Давайте посмотрим код вашего обработчика сообщений.

Другие вопросы по теме