2009-07-17 5 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

답변을 주셔서 감사합니다. 이들은 위대한 explions했다. – Kyle

0

문제는 ATL 라이브러리 파일에 제대로 연결되지 않았기 때문입니다. Visual Studio에서 프로젝트 옵션을 확인하고 ATL에 정적으로 연결되어 있는지 확인하십시오.

+0

CTest :: QueryInterface (struct _GUID const &, void * *)는 ATL 라이브러리 파일을 내 보내지 않을 예정입니까? –

관련 문제