Допускается создание объекта com в dllmain() / DLL_PROCESS_ATTACH?
Загрузка DLL в в DLLMAIN()
/ DLL_PROCESS_ATTACH
может вызвать проблемы. Но может COM Objects
быть экземпляром с помощью eq CoInitialize() / CoCreateInstance()?
РЕДАКТИРОВАТЬ: Вопрос: может ли создание экземпляров COM вызвать аналогичные ошибки, такие как загрузка DLL в этих условиях? Загрузка DLL и создание экземпляров COM кажутся мне в некотором роде похожими.
1 ответ
Я не уверен, откуда вы взяли эту цитату, но она звучит неправильно.
Вы никогда не должны помещать какой-либо код какой-либо значимости в DllMain. Особенно код, который вызывает LoadLibrary. Многие Windows API-интерфейсы будут вызывать LoadLibrary изнутри, поэтому лучше избегать любой сложной инициализации здесь. Используйте глобальный объект C++ (для его конструктора) или, что еще лучше, экспортируйте функцию для инициализации.
CoCreateInstance для внутрипроцессных компонентов в конечном итоге вызовет LoadLibrary или один из его вариантов. Также было бы неразумно вызывать эту функцию в DllMain.