我有一个C ++ DLL,它实现几个COM接口,我试图迁移到托管C ++。 我设置了/ CLR编译器标志和/ MT改变了运行时库属性/ MD,以避免这两个标志之间的冲突,但是这就是我已经改变了。 当它试图注册在构建过程中的dll,我得到以下错误:
R6033 -尝试本地代码初始化过程中使用MSIL代码从此程序这表明在应用程序中的错误。 这是最有可能从本机的构造函数或DllMain中调用一个MSIL编译(/ CLR)函数的结果。
我读到Loader锁定而无法弄清楚 - 我还没有添加任何托管代码的单一调用。 这里的DllMain的程序的整个身体:
[编辑 - 每下面的评论,我说的#pragma非托管到没有改善cpp文件的顶部。 模块初始化是包含在从我可以告诉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
}