Вызов LowLevelKeyboardProcedure в DLL - PullRequest
1 голос
/ 18 августа 2010

Мне удалось заставить входные хуки работать, но теперь я немного заблудился, положив их в библиотеку.

У меня есть простой заголовок с INPUTHOOK_EXPORTS, определенным в IDE, поэтому dll экспортирует (Visual Studio).

#pragma once

#ifdef INPUTHOOK_EXPORTS
    #define INPUTHOOK_API __declspec(dllexport)
#else
    #define INPUTHOOK_API __declspec(dllimport)
#endif

INPUTHOOK_API void InstallInputHook();
INPUTHOOK_API void RemoveInputHook();

и, конечно:

Файл cpp

Дело в том, что когда я пытаюсь скомпилировать эту библиотеку, я получаю два неразрешенных внешних кода, один для SetWindowsHookEx и UnhookWindowsHookEx соответственно. Почему эти две функции недоступны, а другие являются и без проблем? Насколько я понимаю, у меня есть право на включение.

Спасибо

Ответы [ 2 ]

0 голосов
/ 27 августа 2010

SetWindowsHookEx - это макрос, который должен превратиться в SetWindowsHookExA' for ascii or SetWindowsHookExW for wchar. Similary for UnhookWindowsHookEx`.
В сообщаемой ошибке должно быть указано, какая функция отсутствует - A или W - что, по-видимому, по какой-то причине указывает намакрос не на месте.

Похоже, вам не хватает winuser.h в cpp, однако этот или его эквивалент может быть в скомпилированном заголовке stdafx.h.

Вам нужновключите user32.lib при сборке (компоновке) вашей библиотеки (обычно в библиотеках по умолчанию).

0 голосов
/ 18 августа 2010

Из темы MSDN LowLevelKeyboardProc:

Этот хук вызывается в контексте потока, который его установил. Вызов осуществляется путем отправки сообщения в поток, который установил хук. Поэтому поток, который установил ловушку, должен иметь цикл сообщений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...