Захват сообщений Windows, сгенерированных приложением MFC в простом C ++ DLL - PullRequest
5 голосов
/ 16 мая 2011

Прежде всего: это вообще возможно?

У меня есть сторонний dll, который взаимодействует с некоторыми аппаратными средствами.Это написано в MFC.Я получил (от поставщиков DLL) пример решения Visual Studio 2010, которое имеет только один проект: приложение MFC (.exe), которое вызывает стороннюю DLL-библиотеку.Он работает нормально.

Когда я пытаюсь использовать стороннюю dll из моей dll (простой C ++, без MFC, без .NET), я могу нормально вызывать ее функции, но есть одна загвоздка: примерПриложение MFC, кажется, «переопределяет» MessageProc для захвата определенных сообщений, которые генерирует dll третьей стороны.И хотя в dll есть функция с именем «RegisterFuncCallback», и я ее использую, мой обратный вызов никогда не вызывается.

Так вот в чем проблема: как я могу захватить эти сообщения без создания приложения MFC?(Это вообще возможно?)

Ответы [ 2 ]

5 голосов
/ 24 мая 2011

Хорошо, я сделал это.Вот как:

  1. Создайте класс, который наследуется от CWnd
  2. Объявите карту сообщений, связывающую нужные сообщения и их обработчики
  3. При создании окна используйте CreateExфункция (я сделал это в конструкторе моего класса), и передать ему флаг HWND_MESSAGE в последнем, но один параметр.Это создаст окно как «Окно сообщений», то есть невидимое.
  4. Как только я закончу инициализацию окна и dll MFC, я вызываю RunModalLoop для моего скрытого окна в отдельном потоке, так какэто блокируетЭто запускает насос сообщений и начинает получать сообщения DLL MFC.

Редактировать : Я мог бы наконец сделать это, используя только Win32 API.Вот моя история, включая код: Блог Algo Programate .Не волнуйтесь, это на английском.

3 голосов
/ 16 мая 2011

Если DLL работает с сообщениями Win32, вы не сможете их обойти. Но вам не обязательно нужен MFC для этого, достаточно простого решения WinAPI. MFC просто оборачивает Win32 API. Если эти сообщения не являются сообщениями Win32, вам не нужно приложение Win32.

...