Допускается создание объекта 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.

Другие вопросы по тегам