Кроме того, чтобы полагаться на то, что пользователь вызывает определенную функцию, когда он заканчивает работу с DLL (что звучит как ужасная идея)
Учитывая, что у вас уже есть функция Init
, имеет смысл иметь соответствующую Free
функцию.
Как еще вы узнаете, когда пользователь завершит работу с библиотекой? Вы можете подождать, пока DLL не будет выгружена (см. DllMain
), но к тому времени процесс, вероятно, все равно заканчивается.
Полагаю, лучшим решением было бы полностью избежать глобального указателя. Создайте класс, который содержит экземпляр другого класса и ваши методы, и пусть пользователь сам создаст экземпляр (конструктор заменит ваш Init
, а деструктор заменит ваш Free
).