Re: Sink Interface memory leak
On Jan 5, 10:18 am, "Giovanni Dicanio" <giovanni.dica...@invalid.com>
wrote:
"Shaw" <nws...@yahoo.com> ha scritto nel messaggionews:786e05ae-6d06-4b3f-=
b586-3c25bfb6c926@j78g2000hsd.googlegroups.com...
void __stdcall CSinkInterface::OnUpdate(BSTR bstrData)
{
// ::SysFreeString(&bstrData);
}
IIRC, SysFreeString has as input a BSTR, so you don't need the address-of =
&
operator (just ::SysFreeString(bstrData); ).
It may be interesting to read more code, too.
However, if the string is created by the caller of your
CSinkInterface::OnUpdate, I would think that it should be the caller itsel=
f
to free the string, not your method implementation.
Giovanni
That was just a type by me - the &bstr - typed it in manually :)
static const int DISPID_SERVER_UPDATE = 1;
_ATL_FUNC_INFO OnUpdateInfo = {CC_STDCALL, VT_EMPTY, 1,
{VT_BSTR}};
class ATL_NO_VTABLE CSinkInterface :
public CComObjectRootEx<CComMultiThreadModel>,
public IUnknown,
public IDispEventImpl<0, CSinkInterface, &DIID__ITOOLAPIEvents ,
&LIBID_TOOLAPILib, 1, 0>
{
public:
CSinkInterface()
{
m_bAllowUpdates = FALSE;
}
BOOL m_bAllowUpdates;
DECLARE_NO_REGISTRY()
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CSinkInterface)
COM_INTERFACE_ENTRY(IUnknown)
END_COM_MAP()
BEGIN_SINK_MAP(CSinkInterface)
SINK_ENTRY_INFO(0, DIID__ITOOLEvents, DISPID_SERVER_UPDATE,
OnUpdate, &OnUpdateInfo)
END_SINK_MAP()
// IUpdateNews
public:
void __stdcall OnUpdate(BSTR bstrData);
};