我有一个 C++ dll,它实现了几个 COM 接口,我正在尝试迁移到托管 C++。我设置了 /clr 编译器标志并将运行时库属性从 /MT 更改为 /MD 以避免这两个标志之间的冲突,但这就是我所做的全部更改。在构建过程中尝试注册 dll 时,出现以下错误:
R6033 - 在本机代码初始化期间尝试使用此程序集中的 MSIL 代码 这表明您的应用程序中存在错误。这很可能是从本机构造函数或 DllMain 调用 MSIL 编译 (/clr) 函数的结果。
我阅读了有关加载程序锁定的信息,但无法弄清楚 - 我没有添加对任何托管代码的单个调用。这是 DllMain 过程的整个主体:
[编辑 - 根据下面的评论,我将 #pragma unmanaged 添加到 cpp 文件的顶部,但没有任何改进。据我所知,Module 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
}