С моей точки зрения, это долгая проблема. Если DLL используется сторонними приложениями, над которыми у вас нет контроля, трудно заставить другие приложения вызывать какую-либо функцию инициализации. В конечном счете, это может быть требованием, но, конечно, приятно не делать этого, чтобы использовать DLL (например, инициализировать winsock).
Если вызов инициализации невозможен, вероятно, вам нужно полагаться на отложенную инициализацию, которая происходит по требованию. Я наткнулся на довольно приличную статью о DLL Best Practices , которую, возможно, стоит прочитать. В нем есть хороший список конкретных вещей, которые вы можете и не можете делать внутри DLLMain. По своему опыту я знаю, что их необходимо соблюдать (список «не»).