2 つの ATL COM オブジェクトを持つアウトプロセス 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
後のポインターで Release を呼び出さないことIObject1::CreateObject2()
です。object2 を破棄するには、を呼び出す必要がIObject1::RemoveObject2()
あります。 クライアントを実行すると、 RemoveObject2 の後、 object2 は破棄されませんが、 RemoveObject2 の後にクライアントの Iobject2 ポインターで release を呼び出すと、 object2 が破棄されます。