FinalRelease() — ведет себя так-же как и деструктор, т.е никак не вызывается.
Хотя в контроле (функция DllMain) часть связанная с DLL_PROCESS_DETACH
запускается
CComModule _Module;
BEGIN_OBJECT_MAP(ObjectMap)
OBJECT_ENTRY(CLSID_Alemar, CAlemar)
END_OBJECT_MAP()
/////////////////////////////////////////////////////////////////////////////
// DLL Entry Point
extern "C"
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
_Module.Init(ObjectMap, hInstance, &LIBID_ALMRCTRLLib);
DisableThreadLibraryCalls(hInstance);
}
else if (dwReason == DLL_PROCESS_DETACH)
{
_Module.Term();
}
return TRUE; // ok
}
И внутри функции _Module.Term() вызывается Release() для каждого _ATL_OBJMAP_ENTRY
т.е. и для класса CAlemar тоже