2011-10-15 13 views
1

C++/CLIを使用しているプロジェクトからplain-old-C++で書かれたクラスにアクセスしているかなり複雑なプロジェクトに取り組んでいます。これは、(非CLI)C++姉妹プロジェクトと同じ機能を多く使用するWindowsフォームGUIプロジェクトです。私は両方の環境で動作するように調整しようとしている私のクラスの一つでC++/CLIプロジェクトでGetAsyncKeyState()を呼び出す際にエラーが発生しました

、私はこの機能をポーリングキー押下だ:

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

私は両方の未解決のトークンと未解決の外部シンボルエラーを取得していますon "extern "C" short __stdcall GetAsyncKeyState(int)" ([email protected]@[email protected]) referenced in function "public: bool __clrcall Engine::InputManager::IsKeyDown(unsigned char)const " ([email protected]@[email protected]@[email protected])

明らかに、この問題はGetAsyncKeyState()に関連していますが、CLIフレンドリーな実装では何が違う必要があるかわかりません。誰でも私にこれを修正する方法を教えてもらえますか?この機能は、CLI以外の環境でも正常に動作します(数か月あります)。私はこのCLIのものには非常に新しいので、どんな助けも素晴らしいだろうし、あまりにも具体的なヘルプはない。

私はVisual Studio 2010を使用しており、/clrパラメータ(:pureまたは:safeではない)でコンパイルしています。

答えて

3

MSDN libraryは、特定の機能にどのヘッダファイルとライブラリを含める必要があるかの詳細を提供します。

this caseには、windows.h(既に必要です)とuser32.lib(おそらく不足している)が必要です。したがって、コードの先頭に

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

を追加してください。あるいは、プロジェクトのプロパティページのライブラリのリストにuser32.libを追加することもできます。たとえば、デバッグやリリースなど各設定でこれを行うことを忘れないでください。

+0

+1!それはまさに私の問題でした。ありがとう! – chaosTechnician