Есть EXE COM модуль, использующий ATL и MFC.
Занимается отправкой скриншотов на принтер и по почте.
При отправке скриншота по почте в виде приложения к письму используется Simple MAPI (mapi32.dll), дабы отправка происходила через имеющуюся почтовую учётку.
Письмо отправляется без проблем, но при использовании MAPILogoff для закрытия сессии по невыясненной причине происходит вызов _Module.Unlock().
_Module — глобальный экземпляр наследника CComModule. В методах Lock и Unlock вызываются AfxLockApp и AfxUnlockApp соответственно. Это ведёт к тому, что при достижении нуля в счётчике блокировок уничтожается главное окно и модуль завершается.
Собственно, неясно, почему MAPILogoff приводит к такой мистике.
Да, ещё один интересный момент. Этот модуль собирается под MSVC6.0 и MSVC2005. Изначально писался под 6.0 и соответственно ATL 3.0, в такой сборке баг не наблюдается. Зато вылазит в сборке под MSVC2005 (ATL 8.0).