我在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;
}
最佳答案
可能缺少MSDN主要文档,但是我发现this msdn code archive。它包含一个示例项目,在该项目中他们确实保存了ITsSbPluginNotifySink
的副本,因此我相信我的第一个假设是正确的,我应该保留该指针的副本并在最后释放它(也感谢Igor Tandetnik )
关于c++ - 我可以保留该指针的拷贝吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20126386/