Я работаю над довольно запутанным проектом, в котором я получаю доступ к классам, написанным на 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
).