2009-03-01 5 views
0

참고 :해당 인터페이스를 지원하는 개체를 만들 때 E_NOINTERFACE가 나타나는 이유는 무엇입니까?

  • 단일 스레드 아파트 시스템 레지스트리에 CLSID가있는 클래스 개체를 통해 여러 개체을 만들 CoGetClassObject를 사용

인스턴스의 경우 :

hresult = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); 

IClassFactory *pIClassFactory; 

hresult = CoGetClassObject (clsid, CLSCTX_LOCAL_SERVER, NULL, IID_IClassFactory, (LPVOID *)&pIClassFactory); 


hresult = pIClassFactory->QueryInterface (IID_IUnknown, (LPVOID *)&pUnk); 


hresult = pUnk->QueryInterface (__uuidof(IExample), (LPVOID *)&pISimClass); 

참고 : 반환

  • E_NOINTERFACE
    • * ppvObject이 설정되어
NULL

질문 :

  • 가 어떻게 그것이 참으로 등록되어 있는지, 확인할 수 있습니다 -이 문제가있는 경우?
+0

더 이상 관련이 없으므로 게시물을 닫으시기 바랍니다. 감사합니다. – Aaron

답변

3

여기서 문제는 클래스 개체와 개체 자체를 혼동시키는 것입니다. CoGetClassObjectIClassFactory을 구현하고 관심있는 개체의 인스턴스를 만드는 개체에 대한 포인터를 제공합니다. 해당 개체의 실제 인스턴스가 아닙니다.

예에서 IClassFactory 포인터의 QueryInterface을 호출하여 IUnknown 포인터가 표시됩니다. 이 포인터는 여전히 클래스 객체의 인스턴스를 가리키고 있으므로 관심있는 인터페이스에 대해 QueryInterface을 수행하면 오류가 발생합니다. 대신 IClassFactory::Createinstance에 전화하여 IUnknown 포인터를 실제 객체에 가져오고 그 포인터에 QueryInterface을 수행해야합니다.

+0

감사합니다. -하지만 지금 : "이 연결 가능한 개체는 지정된 나가는 인터페이스를 지원하지 않습니다." – Aaron

+0

샘플 코드를 게시하면 도움을 줄 수 있습니다. –

1

또한 CoCreateInstance 함수를 살펴보십시오.

관련 문제