Vous ne pouvez pas faire cela. L'extrait proposé testerait si l'objet pointé par punk
prend en charge l'interface avec IID_MyInterface
et s'il prend en charge le pointeur d'interface serait récupéré dans m_pMyInterface
et AddRef()
aurait été appelé sur le pointeur récupéré. Comme punk
n'est pas initialisé, il ne pointe sur aucun objet valide, donc essayer d'appeler QueryInterface()
entraînerait un comportement indéfini - votre programme tomberait probablement en panne.
Afin de tester si l'objet pointé par m_pMyInterface
prend en charge l'interface avec IID_MyInterface
vous devez faire ce qui suit:
IUnknown* punk;
HRESULT hr = m_pMyInterface->QueryInterface(IID_MyInterface, (void**)&punk);
if(SUCCEEDED(hr)) {
//the interface is supported - don't forget that AddRef() has been called
} else {
//the interface is not supported
}
Ce dernier ne peut se faire si m_pMyInterface
déjà pointé un live objet COM .
alors que si le CoCreateInstance retourne E_NOINTERFACE, que puis-je faire? –
@Tony Cela signifie que la classe spécifiée ne supporte pas cette interface: donc si vous voulez toujours créer une instance, soit spécifier une classe différente, soit spécifier une interface différente. – ChrisW
@Tony: demandez à CoCreateInstance de renvoyer IID_IUnknown, puis faites QueryInterface. –