我在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/

10-13 08:27