Блокировка погрузчика (ошибка regsvr32 R6033) с управляемым C

Это указывает на ошибку в приложении. Скорее всего, это результат вызова функции, составленной 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
}
none

Ответ на: "Блокировка погрузчика (ошибка regsvr32 R6033) с управляемым C"

Количество ответов:2

Использование / clr флаг сделал ваши методы управляются (т.е. они в настоящее время составлены до MSIL), но вы называете их для DllMain который-не-управляется. К сожалению, это примерно так далеко, как мои ограниченные знания могут принять его.

Вам нужно добавить флаг компилятора /clr только к файлам, которые используют управляемый код, а не для всего проекта.

Это то, что визуальная студия "Волшебник" делает, вот как я тестировал:

  • Создать визуальный проект СЗ ATL
  • Добавлен ATL Простой объект, для того, чтобы иметь интерфейс COM (Проект-'gt;Add Class)
  • Добавлено CLR Компонент класса. Волшебник подсказыл мне: «Вы добавляете компонент CLR в родной проект. Ваш проект будет преобразован в поддержку общего языка Runtime." -43-" Составной проект, составляет штраф и регистрирует штраф.
  • Проверено настройки проекта - "Нет общего языка Runtime поддержки"
  • Проверено clrcomponennt.cpp настройки -'gt; "Общий язык Runtime Поддержка (/clr)"
  • Открыл dll в OleView -