Есть dll сервер на ATL. Его использует клиент на C#.
Клиент создает основной класс сервера, инициализит его hwnd какого-то своего окна и дальше пользуется методами основного класса.
Дальше я закрываю приложение-клиент, основной объект сервера начинает удалаться. Это довольно длительный процесс в FinalRelease.
Разрушение до конца не доходит.
В середине разрушения я получаю DLL_PROCESS_DETACH, при этом m_nLockCnt=2 и начинаю проходить массив вызовов CRT atexit
Breakpoint на DLL_THREAD_DETACH меняет всю картину поведения на корректную.
AtlGetVersion = 0x0900
Я newbie в ATL и COM, поэтому мог сделать глупость.