none
INPUT構造体を参照できるようにするには? RRS feed

  • 質問

  • たびたびすみません。
    下記の状況でINPUT構造体を使おうとしたのですが、コンパイル時にエラーになってしまいます。
    エラー内容:
    構文エラー : ';' が、識別子 'inputKey' の前に必要です。

    -----
    INPUTがどのヘッダにあるのか検索してみたところwinuser.hの中にありました。
    winuser.hは、windows.hの中から呼ばれているので、INPUT構造体が参照
    できるかと思ったのですが、できませんでした。
    ----

    状況:
    OS:WindowsXP SP2

    PlatFormSDK:インストール済み。

    プロジェクトの設定:メニューのツール->オプションから

    実行可能ファイル:C:\Program Files\Microsoft Platform SDK\Bin
    インクルードファイル:C:\Program Files\Microsoft Platform SDK\include
    ライブラリファイル:C:\Program Files\Microsoft Platform SDK\Lib
    を追加しました。

    ライブラリは下記のものが追加されています。
    kernel32.lib
    user32.lib
    gdi32.lib
    winspool.lib
    comdlg32.lib
    advapi32.lib
    shell32.lib
    ole32.lib
    oleaut32.lib
    uuid.lib

    プロジェクトの種類:Windowsフォームアプリケーションです。
    コマンドラインのオプションは /clr:pure
    プロジェクトのプロパティの親またはプロジェクト規定値からの継承にチェック入れました。

    下記のように構造体を呼んでいます。
    Formのヘッダ内。


    #include <windows.h>

     public ref class Form1 : public System::Windows::Forms::Form
     {


      protected: 
                INPUT inputKey[1];/*"<-ここです"*/

     }

    -----


     

    2007年3月11日 12:31

回答

  • /clr:pureではINPUTは使えないというか、windows.hをインクルードなんてほぼ無理だと思いますが。
    2007年3月11日 13:11
  • ご返答ありがとうございます。

    あ。そのとおりですね。
    clr:pure->clrにしてコンパイルしてみます。

    2007年3月11日 13:19
  • INPUTがどのヘッダにあるのか検索してみたところwinuser.hの中にありました。
    そこまでやったのであれば、その前後のコードも確認されると良かったでしょう。

    #if(_WIN32_WINNT >= 0x0500)

    という記述があるため、定義されていないになるのでしょう。

    #define _WIN32_WINNT 0x0500
    #include <windows>

    とすれば、INPUT構造体およびSendInput関数等は使えるようになります。

    ただし、マネージドクラスのメンバ変数にアンマネージドの構造体をメンバ変数として持つことは出来ません。(配列も)
    ですので、ポインタで管理するなりして対応するしかないでしょう。

    2007年3月11日 13:26
  • コンパイルオプションの変更と、ヘッダの前のdefine文を追加したところ
    問題なくコンパイルできました。

    ありがとうございました!

    2007年3月11日 13:53

すべての返信

  • /clr:pureではINPUTは使えないというか、windows.hをインクルードなんてほぼ無理だと思いますが。
    2007年3月11日 13:11
  • ご返答ありがとうございます。

    あ。そのとおりですね。
    clr:pure->clrにしてコンパイルしてみます。

    2007年3月11日 13:19
  • INPUTがどのヘッダにあるのか検索してみたところwinuser.hの中にありました。
    そこまでやったのであれば、その前後のコードも確認されると良かったでしょう。

    #if(_WIN32_WINNT >= 0x0500)

    という記述があるため、定義されていないになるのでしょう。

    #define _WIN32_WINNT 0x0500
    #include <windows>

    とすれば、INPUT構造体およびSendInput関数等は使えるようになります。

    ただし、マネージドクラスのメンバ変数にアンマネージドの構造体をメンバ変数として持つことは出来ません。(配列も)
    ですので、ポインタで管理するなりして対応するしかないでしょう。

    2007年3月11日 13:26
  • コンパイルオプションの変更と、ヘッダの前のdefine文を追加したところ
    問題なくコンパイルできました。

    ありがとうございました!

    2007年3月11日 13:53