2009-07-17 29 views
1

私は内部にcomマップを持つアンマネージドC++クラスを持っています。 EX:未解決の外部シンボル... QueryInterface

BEGIN_COM_MAP 
(MyClass) 
    COM_INTERFACE_ENTRY(...) 
END_COM_MAP 

しかし、今のクラスの中から、私は次のエラーを取得this-> QueryInterfaceを呼び出してしようとした場合:私は試してみて、QueryInterfaceメソッドを実装する場合、今

unresolved external symbol "public: virtual long __stdcall CTest::QueryInterface(struct _GUID const &,void * *)" ([email protected]@@[email protected]@[email protected]) referenced in function "public: __thiscall CTest::CTest(void)" ([email protected]@[email protected])

しかしをI次のエラーが表示されます。

 
error C2535: 'HRESULT CTest::QueryInterface(const IID &,void **) throw()' : member function already defined or declared 

私は間違っていますか?

答えて

1

回答ありがとうございますが、最後の問題は、私がコンストラクタからQueryInterfaceを取得しようとしていたようです。私が別の方法に移動すると、すべてうまくいった。

コンストラクタからQueryInterfaceを呼び出すことができない理由は誰にもありますか?

+0

QueryInterfaceを呼び出すことができるかどうかにかかわらず、それは仮想関数なので、コンストラクタからの仮想メソッドの呼び出しに対する標準的なアドバイス*が適用されます。 –

+1

QueryInterface(別名QI)は、完全に構築されたオブジェクトに依存しているため、一般にコンストラクタから呼び出されません。オブジェクトは基本クラスoutから構築され、COMサポートが基本クラスの周りのラッパーとして追加された場合、QIは継承チェーンに沿ったコンストラクタから決して動作しません。 これは通常、FinalConstructまたはInitializeメソッドで行われます。 –

+0

回答ありがとうございました。これらは素晴らしい展開でした。 – Kyle

0

問題は、ATLのlibファイルに正しくリンクされていないことです。 Visual Studioでプロジェクトオプションを確認し、ATLに静的にリンクしていることを確認してください。

+0

CTest :: QueryInterface(struct _GUID const&、void * *)はATLライブラリファイルのエクスポートではありませんか? –

関連する問題