无法释放IUnkown对象,收到错误:HRESULT:"系统无法找到指定的文件"

时间:2014-11-07 14:11:55

标签: c++ com directshow

我试图“释放”一些IUnkown COM对象,但是我收到错误:

  

hr = 0x00000002:系统找不到指定的文件。

当我尝试释放名字对象和/或propertybag对象时会发生这种情况。我简化了代码以简化问题。我的代码一直运行到我调用BindToStorage的地方(此调用返回S_OK)但是当我调用release时,我得到了我的错误。

IEnumMoniker *pEnum;
HRESULT hr = EnumerateDevices(CLSID_VideoInputDeviceCategory, &pEnum);

IMoniker *pMoniker = NULL;
IPropertyBag *pPropBag = NULL;

if(pEnum->Next(1, &pMoniker, NULL) == S_OK){
    hr = pMoniker->BindToStorage(0, 0, IID_PPV_ARGS(&pPropBag));
    hr = pPropBag->Release();
    hr = pMoniker->Release();
}

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

IUnknown::Release会返回未完成的引用计数,而非HRESULT。 2的值是有效的,你应该简单地忽略它。这并不意味着存在文件错误或其他情况"系统找不到指定的文件。"记录此行为 - 标准COM行为,see MSDN for details