Здравствуйте, Amor, Вы писали:
A>Какие будут предложения?
Предложение такое: продлить время жизни библиотеки до самого последнего момента.
Что-то в таком роде
// внутри DLL
HMODULE g_hDLL;
ULONG g_nRef = 0;
void add_ref() { ++g_nRef; }
void dec_ref() { if(--g_nRef) FreeLibrary(g_hDLL); }
struct dll_reference
{
dll_reference() { add_ref(); }
dll_reference(const dll_reference&) { add_ref(); }
~dll_reference() { dec_ref(); }
};
struct my_exception : std::exception, dll_reference
{
.....
};
// и так везде!
Подобным образом обеспечивается живучесть Inproc COM Server'ов — DLL живёт до тех пор, пока есть COM-объекты, созданные ею.
Подсчёт ссылок удобно делать интрузивным, а то и вообще переложить на плечи ядра (LoadLibrary/FreeLibrary тоже считают ссылки в недрах).