Марк Рэнсом прав
простое, чистое и простое решение - инициализация COM вызывающей стороной.
Гадкий хак
Вы можете попробовать свой первый вызов - скорее всего, CoCreateInstance
, и, если он вернет CO_E_NOTINITIALIZED, запустите CoInitialize
самостоятельно (и в этом случае не забудьте удалить)
Однако , все еще проблематично «внедрить» CoInitialize в поток вызывающей стороны из DLL. Так что есть
Чистый раствор
Позвольте DLL создать рабочий поток (что означает, что DLL нужны вызовы Init и Teardown), CoInitializeEx в этом потоке самостоятельно, и переместите все вызовы COM в этот отдельный поток.