Я пишу подключаемый модуль для брокера подключения к удаленному рабочему столу в разделе ITsSbPlugin::Initialize
метод, который он заявляет
Подключаемые модули должны вызывать OnInitialized для указанного объекта приемника ITsSbPluginNotifySink.
Что я и делаю, однако я заметил, что на 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;
}
AddRef
для указателя, если хотите сохранить его за пределами вызоваInitialize
; и вы должны затем вызватьRelease
на нем, когда он вам больше не нужен (вероятно, вTerminate
, сразу послеOnTerminate
вызова). В противном случае объект может быть уничтожен преждевременно, и вы останетесь с оборванным указателем. - person Igor Tandetnik   schedule 21.11.2013