[英]C++: Unable to register my DLL using regsvr32, but via IDE works
[英]Loader lock (regsvr32 R6033 error) with managed C++ dll
我有一个C ++ DLL实现了几个COM接口,我正在尝试迁移到托管C ++。 我设置/ clr编译器标志并将运行时库属性从/ MT更改为/ MD以避免这两个标志之间的冲突,但这就是我所有的变化。 当它在构建过程中尝试注册dll时,我收到以下错误:
R6033 - 在本机代码初始化期间尝试使用此程序集中的MSIL代码这表示应用程序中存在错误。 它很可能是从本机构造函数或DllMain调用MSIL编译(/ clr)函数的结果。
我读到了Loader Lock并且无法弄明白 - 我没有为任何托管代码添加一个调用。 这是DllMain程序的整个主体:
[编辑 - 根据下面的评论,我将#pragma unmanaged添加到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
}
您需要将/ clr编译器标志仅添加到使用托管代码的文件,而不是整个项目。
这就是Visual Studio“向导”所做的,这是我测试的方式:
使用/ clr标志已经使你的方法得到了管理(即它们被编译成MSIL),但是你正在为DllMain调用它们 - 它们没有被管理。 不幸的是,就我的有限知识而言,这是可以接受的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.