У меня есть C ++ dll, который реализует несколько COM-интерфейсов, которые я пытаюсь перенести на управляемый C ++. Я установил флаг компилятора / clr и изменил свойство Runtime Library с / MT на / MD, чтобы избежать конфликта между этими двумя флагами, но это все, что я изменил. Когда он пытается зарегистрировать DLL во время процесса сборки, я получаю следующую ошибку:
R6033 - Попытка использовать код MSIL из этой сборки во время инициализации собственного кода
Это указывает на ошибку в вашем приложении. Скорее всего, это результат вызова MSIL-скомпилированной (/ clr) функции из собственного конструктора или из DllMain.
Я читал о Loader Lock и не могу понять - я не добавил ни одного вызова в какой-либо управляемый код. Вот весь текст процедуры DllMain:
[Правка - согласно комментарию ниже, я добавил неуправляемую #pragma в начало файла cpp без каких-либо улучшений. Модуль init - это весь код, содержащийся в библиотеках ATL, что я могу сказать.]
extern "C"
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
lpReserved;
if (dwReason == DLL_PROCESS_ATTACH)
{
_Module.Init(ObjectMap, hInstance, &MYGUID);
DisableThreadLibraryCalls(hInstance);
}
else if (dwReason == DLL_PROCESS_DETACH)
_Module.Term();
return TRUE; // ok
}