Ошибки при попытке вызвать GetAsyncKeyState () в проекте C ++ / CLI - PullRequest
2 голосов
/ 16 октября 2011

Я работаю над довольно запутанным проектом, в котором я получаю доступ к классам, написанным на plain-old-C ++, из проекта, использующего C ++ / CLI.Это проект с графическим интерфейсом Windows Forms, который использует много тех же функций, что и его (не CLI) родственный проект C ++.

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

inline bool IsKeyDown(unsigned char ch) const { 
    return (GetAsyncKeyState(ch) & (1u << 15)) != 0; 
}

Я получаю ошибки как неразрешенного токена, так и нерешенного внешнего символа на "extern "C" short __stdcall GetAsyncKeyState(int)" (?GetAsyncKeyState@@$$J14YGFH@Z) referenced in function "public: bool __clrcall Engine::InputManager::IsKeyDown(unsigned char)const " (?IsKeyDown@InputManager@Engine@@$$FQBM_NE@Z)

Очевидно, что проблема связана с GetAsyncKeyState(), ноЯ не уверен, что должно отличаться для CLI-дружественной реализации.Может кто-нибудь направить меня, как это исправить?Функция работает должным образом в моей среде без CLI (и работает в течение нескольких месяцев).Я очень плохо знаком с этим интерфейсом командной строки, поэтому любая помощь будет замечательной, и никакая помощь не будет слишком специфичной.

Если это поможет, я использую Visual Studio 2010 и компилирую с параметром /clr (не :pure или :safe).

1 Ответ

4 голосов
/ 16 октября 2011

Библиотека MSDN предоставляет сведения о том, какие заголовочные файлы и библиотеки необходимо включить для какой-либо конкретной функции.

В в этом случае вам нужен windows.h (который у вас уже должен быть) и user32.lib (который, вероятно, отсутствует). Так что добавь

#pragma comment(lib, "user32.lib")

вверху вашего кода и все должно быть хорошо. Кроме того, вы можете добавить user32.lib в список библиотек на страницах свойств проекта, не забывая делать это для каждой конфигурации, например, отладки и выпуска.

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