none
Windows7のエクスペリエンスインデックスをVC++2005のアプリケーションからアクセスしたいのですが RRS feed

  • 質問

  • VC++2005でアプリケーションの開発メンテナンスを行っています。

    Windows7のエクスペリエンスインデックスの情報を取得させる必要があり、その実装を試しています。

    WindowsSDK for Windows7をインストールすると、その中に、"WinSATCOMInterfaceI.h"があり、

    これをアプリケーションにインクルードして、Comベースで取得できるというところまでは理解し、単体のプログラムを

    作成(Win32 コンソールAP)してみたところ、うまく情報を取得できました。

    このコードを既にあるアプリケーション(VC++2005)に組み込んだところ、ATL/COMのいろいろな定義の整合がとれないようで、

    エラーが多発します。既存のコードは、かなり古いWindowsSDKのファイルが必要なので、その影響と思います。

    このエラーは、COMのスマートポインタ関係だったことから、スマートポインタを使用するのはあきらめ、COMのインタフェースを

    順番に取得し、データを取得するコードを作成しました。

    具体的には、IID_IQueryRecentWinSATAssessment のあたりです。

    コンパイルは成功しますが、リンクで以下のようなエラーがでます。


    error LNK2019: 未解決の外部シンボル _CLSID_CQueryWinSAT が関数 "public: void __thiscall  XXXXX::XXXXXX() で参照されました。

    XXXXX::XXXXXX()は実際に呼び出しを行っているメソッドです。

    このエラーをなくする方法を探しているのですが、COMの外部参照をリンク時に解決するにはどのようにすればよいか、ご存じの方は教えていただけないでしょうか。

    COMのプログラミングは経験が少ないので、初歩的な質問ですが、よろしくお願いします。


    Reiji Tanaka

    2012年7月12日 11:49

回答

  • Use __uuidof(CQueryWinSAT) if you compile as C++



    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP

    • 回答としてマーク Reiji 2012年7月12日 23:18
    2012年7月12日 16:54

すべての返信

  • Use __uuidof(CQueryWinSAT) if you compile as C++



    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP

    • 回答としてマーク Reiji 2012年7月12日 23:18
    2012年7月12日 16:54
  • Dear Sheng,

    Excellent!
    Link was successful.

    I can go next step.
    Thank you for good answer.

    Reiji


    Reiji Tanaka

    2012年7月12日 23:18