IShellBrowser を実装しようとしています。そのような方法の1つは次のとおりです。
HRESULT STDMETHODCALLTYPE IShellBrowser::QueryActiveShellView(/* [out] */ __RPC__deref_out_opt IShellView **ppshv)
これにより、呼び出し元のアクティブなシェル ビュー ポインターが取得されます (私の場合、常に 1 つのシェル ビューしかありません)。
しかし、呼び出し元に代わって AddRef を呼び出す必要があるのか、それとも実際に呼び出し元が独自の AddRef/Release を実行する責任があるのかが非常に不明です。
私は副作用によるプログラミングのファンではありません - そしてそれはまさに AddRef が何であるかです - 呼び出し元が必ずしも知っているとは限らない、呼び出し元に対する隠された期待です。
IShellBrowser::QueryActiveShellView のドキュメントを見ると、まったく言及されていません。しかし、IUnknown::AddRef を見ると、インターフェイス ポインターのコピーを作成するメソッドはすべて AddRef を呼び出す必要があることがわかります - http://msdn.microsoft.com/en-us/library/ms691379%28VS.85%29.aspx
作成するインターフェイス ポインターの新しいコピーごとに、このメソッドを呼び出します。たとえば、ポインターのコピーをメソッドから戻す場合は、そのポインターで AddRef を呼び出す必要があります。