2

マウスのクリックとキーストロークをシミュレートする、数年前に書いたプログラムをコンパイルしようとしています。私はそれをこの最小限の例に減らしました:

#include "Windows.h"

int main(){
    INPUT foo;
    return 0;
}

それは私にこのエラーを与えます:

C:\projects\clicker>g++ minimaltest.cpp
minimaltest.cpp: In function 'int main()':
minimaltest.cpp:4:2: error: 'INPUT' was not declared in this scope
minimaltest.cpp:4:8: error: expected ';' before 'foo'

INPUTに関する MSDN のページには、Windows.h で定義されていると記載されているため、型が認識されない理由がわかりません。

別のstackoverflowユーザーがここで同様の問題を抱えていましたが、彼らの解決策である を追加#define _WIN32_WINNT 0x0500してもエラーは修正されませんでした。

何年も前に Windows XP でプログラムをビルドすることができました。Windows 7 では INPUT が XP のように機能しないのではないでしょうか? それとも、コンパイラにフラグを提供するのを忘れたのでしょうか?

4

1 に答える 1

7

#defineの後に toを置き忘れました#include。この結果、未定義とwindows.h見なされるため、宣言されません。次に、 が存在する可能性が過ぎた後に定義します。_WIN32_WINNTINPUTINPUT

#define _WIN32_WINNT 0x0500 //RIGHT
#include "Windows.h"
#define _WIN32_WINNT 0x0500 //WRONG

int main(){
    INPUT foo;
    return 0;
}

補足windows.hとして、 がソース ファイルと同じディレクトリにない限り、通常は#include <>ではなくを使用してインポートする必要があり#include ""ます。

于 2012-07-21T22:25:03.123 に答える