IUnknown->Release() ドキュメントからの引用: 「呼び出し元への注意 インターフェイス ポインターを使用する必要がなくなったら、このメソッドを呼び出します。in-out パラメーターを受け取るメソッドを作成している場合は、渡すポインターで Release を呼び出します。その上に出力値をコピーする前に入力してください。」
1. 以下のコードで pDocument->Release() を呼び出した後、@rc 変数は 1 に等しくなります。pDocument に対して Release を 2 回呼び出す必要がありますか?
2. IDispatch の参照カウントが増加するのはどのような場合ですか?
3.IDispatch を関数にポインタとして渡すと、IDispatch の参照カウントは増加しますか?
4.何十もの IDispatch* オブジェクトがあるので、そのうちのどれかを Release() するのを忘れたらどうしますか? メモリーリーク?
5.すべての IDispatch* を簡単にリリースする方法はありますか? それとも手動でリリースする必要がありますか?
AutoWrap(DISPATCH_METHOD, &result.GetVARIANT(), pDocuments, TEXT("Close"), 1, saveChanges.GetVARIANT());
AutoWrap(DISPATCH_METHOD, &result.GetVARIANT(), pWApp, TEXT("Quit"), 0);
//Finalizing
if (pWApp)
{
pWApp->Release();
pWApp = NULL;
}
if (pDocuments)
{
ULONG rc = pDocuments->Release();
pDocuments = NULL;
}
if (pActiveDocument)
{
pActiveDocument->Release();
pActiveDocument = NULL;
}