我试图“释放”一些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();
}
有什么想法吗?
答案 0 :(得分:4)
IUnknown::Release
会返回未完成的引用计数,而非HRESULT
。 2的值是有效的,你应该简单地忽略它。这并不意味着存在文件错误或其他情况"系统找不到指定的文件。"记录此行为 - 标准COM行为,see MSDN for details。