Проект создавался как ATL Project.
Для класса компонента, wizard создал примерно такой код:
#ifndef __ALEMAR_H_
#define __ALEMAR_H_
#include "resource.h" // main symbols
#include <atlctl.h>
#include <exdisp.h>
#include <Mshtml.h>
#include "pgpfunc.h"
/////////////////////////////////////////////////////////////////////////////
// CAlemar
class ATL_NO_VTABLE CAlemar :
public CComObjectRootEx<CComSingleThreadModel>,
public IDispatchImpl<IAlemar, &IID_IAlemar, &LIBID_ALMRCTRLLib>,
public CComControl<CAlemar>,
public IPersistStreamInitImpl<CAlemar>,
public IOleControlImpl<CAlemar>,
public IOleObjectImpl<CAlemar>,
public IOleInPlaceActiveObjectImpl<CAlemar>,
public IViewObjectExImpl<CAlemar>,
public IOleInPlaceObjectWindowlessImpl<CAlemar>,
public CComCoClass<CAlemar, &CLSID_Alemar>,
public IObjectSafetyImpl<CAlemar, INTERFACESAFE_FOR_UNTRUSTED_CALLER
| INTERFACESAFE_FOR_UNTRUSTED_DATA>
{
public:
CAlemar()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_ALEMAR)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CAlemar)
COM_INTERFACE_ENTRY(IAlemar)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IViewObjectEx)
COM_INTERFACE_ENTRY(IViewObject2)
COM_INTERFACE_ENTRY(IViewObject)
COM_INTERFACE_ENTRY(IOleInPlaceObjectWindowless)
COM_INTERFACE_ENTRY(IOleInPlaceObject)
COM_INTERFACE_ENTRY2(IOleWindow, IOleInPlaceObjectWindowless)
COM_INTERFACE_ENTRY(IOleInPlaceActiveObject)
COM_INTERFACE_ENTRY(IOleControl)
COM_INTERFACE_ENTRY(IOleObject)
COM_INTERFACE_ENTRY(IPersistStreamInit)
COM_INTERFACE_ENTRY2(IPersist, IPersistStreamInit)
COM_INTERFACE_ENTRY(IObjectSafety)
END_COM_MAP()
BEGIN_MSG_MAP(CAlemar)
CHAIN_MSG_MAP(CComControl<CAlemar>)
DEFAULT_REFLECTION_HANDLER()
END_MSG_MAP()
// IViewObjectEx
DECLARE_VIEW_STATUS(VIEWSTATUS_SOLIDBKGND | VIEWSTATUS_OPAQUE)
// IAlemar
public:
~CAlemar()
{
//Вот сдесь должны освобождать какие-нибудь ресурсы
// например
m_Pgp.FreeLib();
}
STDMETHOD(GetDoc)(/*[in]*/BSTR bstrAddr);
STDMETHOD(Decrypt)(/*[out, retval]*/ BSTR *pVal);
STDMETHOD(Initialize)();
STDMETHOD(PostFile)(BSTR FileName, BSTR Request, BYTE iSource);
STDMETHOD(get_lReadyState)(LONG* pVal);
STDMETHOD(put_lReadyState)(LONG newVal);
HRESULT OnDraw(ATL_DRAWINFO& di)
{
//
return S_OK;
}
char m_strTempPath[_MAX_PATH];
PGPClass m_Pgp;
};
#endif //__ALEMAR_H_
Так вот, по завершению работы
деструктор не вызывается
Так же пытался вставить что-нибудь типа:
virtual ULONG STDMETHODCALLTYPE Release()
{
//Освобождение ресурсов
// например
m_Pgp.FreeLib();
}
ругается что метод Release уже определен
Так все же где освобождать ресурсы?