我正在尝试实现 IShellBrowser。一种方法是:
HRESULT STDMETHODCALLTYPE IShellBrowser::QueryActiveShellView(/* [out] */ __RPC__deref_out_opt IShellView **ppshv)
这将获取调用者的活动 shell 视图指针(在我的例子中,在任何给定时间只有一个 shell 视图)。
但是很不清楚我是否应该代表调用者调用 AddRef,或者实际上调用者是否有责任自己做 AddRef/Release?
我根本不喜欢通过副作用进行编程——这正是 AddRef 的样子——对调用者的隐藏期望,调用者不一定知道。
并查看 IShellBrowser::QueryActiveShellView 的文档,他们根本没有提及它。但是查看 IUnknown::AddRef,我们看到任何复制接口指针的方法都应该调用 AddRef - http://msdn.microsoft.com/en-us/library/ms691379%28VS.85%29.aspx
为您创建的接口指针的每个新副本调用此方法。例如,如果要从方法传回指针的副本,则必须对该指针调用 AddRef。