我有一个进程外 COM 服务器,它有两个 ATL COM 对象。object1 公开了一个接口,该接口在内部创建 object2 并以下列方式返回一个指向它的接口指针:
HRESULT CObject1::CreateObject2(IObject2** pIobj2)
{
CComObject<Object2>* pObj = NULL;
HRESULT hr = CComObject<Object2>::CreateInstance(&pObj);
hr = pObj->QueryInterface(IID_IObject2,(void**)pIobj2);
//Some reason i need to store this pIobj2
(*pIobj2)->AddRef();
return hr;
}
Object1 暴露了另一个接口来移除 object2
HRESULT CObject1::RemoveObject2(IObject2* pIobj2)
{
pIobj2->Release(); //This to compensate QI done in CreateObject2
pIobj2->Release(); //This to compensate addref done to store in create
}
我的要求是客户端不应该IObject2
在IObject1::CreateObject2()
. 要销毁 object2 它应该调用IObject1::RemoveObject2()
。当我执行客户端时,在 RemoveObject2 之后,object2 不会被销毁,但是当我在 RemoveObject2 之后在客户端的 Iobject2 指针上调用 release 时,object2 会被销毁。