Вы не можете этого сделать.Предложенный фрагмент будет проверять, поддерживает ли объект, на который указывает punk
, интерфейс с IID_MyInterface
, и если он поддерживает интерфейс, указатель интерфейса будет извлечен в m_pMyInterface
, и для извлеченного указателя будет вызван AddRef()
.Поскольку punk
в неинициализированном виде не указывает на какой-либо действительный объект, поэтому попытка вызвать QueryInterface()
приведет к неопределенному поведению - ваша программа, скорее всего, вылетит.
Чтобы проверить, не указывает ли объектm_pMyInterface
поддерживает интерфейс с IID_MyInterface
, вам необходимо выполнить следующее:
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
}
Последнее может быть сделано, только если m_pMyInterface
уже указывает на работающий COM-объект.