Вопрос

Я хочу обработать некоторые сообщения SAPI из библиотеки DLL, которая является своего рода плагином.Как обрабатывать сообщения / события внутри библиотеки DLL VC ++.Обработка событий SAPI показана в примере по адресу:http://msdn.microsoft.com/en-us/library/ms720165%28VS.85%29.aspx

Это было полезно?

Решение

Для обработки "обычных" сообщений вам все еще нужен объект Window.Это может быть специальное окно "только для сообщений", которое использует инфраструктуру очереди обмена сообщениями только совместно с обычными окнами.Чтобы создать его, сначала зарегистрируйте свой класс обработки сообщений с помощью RegisterClass().Затем создайте очередь сообщений, передав HWND_MESSAGE в качестве родительского окна для CreateWindow().Вы получите обратно столько, сколько сможете, а затем отправитесь в SAPI.

Однако SAPI поддерживает и другие интерфейсы.Документация ISpNotifySource называет 4:Сообщения Windows, обратные вызовы, события и COM (ISpNotifySink).Чтобы использовать обратные вызовы, просто передайте адрес одного из ваших методов DLL в SetNotifyCallbackFunction.

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

Если ваш код выполняется как плагин, вы можете подумать о том, чтобы SAPI перезвонил вам напрямую, используя ISpNotifySource::setnotifycallbackфункция вместо того , чтобы ISpNotifySource::SetNotifyWindowMessage (Исходный код).Затем SAPI вызовет вашу функцию напрямую, когда произойдет событие.

WndProc используется для получения всех сообщений / событий, направленных в окно.

Ваша DLL-библиотека должна создать окно и ждать сообщений в окне.Если возможно, вам следует реализовать это в вашем основном процессе, или вы можете заставить dll создать отдельный поток, который создавал бы окно и ожидал сообщения, в то время как фактическая функция возвращает управление процессу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top