我在Remote Desktop Connection Broker方法中为ITsSbPlugin::Initialize
编写了一个插件
插件应在指定的ITsSbPluginNotifySink接收器对象上调用OnInitialized。
我做了,但我注意到ITsSbPluginNotifySink
它也有OnTerminated()
方法。它没有在ITsSbPlugin::Terminate
中说你需要拨打OnTerminated()
,但我应该吗?
如果我确实需要致电OnTerminated()
我应该将传递的ITsSbPluginNotifySink
复制到本地变量并使用它来调用OnTerminated()
吗?
class CTsSbPluginProxy : public ITsSbPlugin
{
public:
//(Snip)
HRESULT STDMETHODCALLTYPE Initialize(
__RPC__in_opt ITsSbProvider *pProvider,
__RPC__in_opt ITsSbPluginNotifySink *pNotifySink,
__RPC__in_opt ITsSbPluginPropertySet *pPropertySet);
HRESULT STDMETHODCALLTYPE Terminate(HRESULT hr);
private:
//(Snip)
ITsSbPluginNotifySink *m_pNotifySink
};
HRESULT STDMETHODCALLTYPE CTsSbPluginProxy::Initialize(
__RPC__in_opt ITsSbProvider *pProvider,
__RPC__in_opt ITsSbPluginNotifySink *pNotifySink,
__RPC__in_opt ITsSbPluginPropertySet *pPropertySet)
{
//(Snip)
m_pNotifySink = pNotifySink;
m_pNotifySink->OnInitialized(S_OK);
return S_OK;
}
HRESULT STDMETHODCALLTYPE CTsSbPluginProxy::Terminate(HRESULT hr)
{
//(Snip)
//Is this legal?
m_pNotifySink->OnTerminated();
return S_OK;
}
答案 0 :(得分:0)
可能缺少MSDN主要文档,但我发现this msdn code archive。它包含一个示例项目,他们会保留ITsSbPluginNotifySink
的副本,所以我相信我在第一次假设我应该保留指针的副本并在最后释放它时也是正确的(还要感谢Igor Tandetnik for reminding me about calling AddRef
)