C++ cli 加载库193 我正在创建一个C++或CLI DLL,它将被加载到一个传统的C++应用程序中。遗留应用程序通过对LoadLibrary的传统调用来实现这一点。应用程序和C++/CLI dll均以64位模式编译
当LoadLibrary调用发生时,它失败并出现错误193。这通常意味着某些非64位组件正在尝试加载。在visual studio 2010中查看dll加载输出时,我看到加载mscoree.dll时发生故障(确切地说,我看到加载了我的dll,然后加载了mscoree,然后卸载了mscoree,然后卸载了我的dll,然后返回错误)。特别是C:\Windows\System32\mscoree.dll正在加载,当我检查这个mscoree.dll时,我发现它的目标是I386 如何确保我的应用程序链接到正确的mscoree.dll?我知道这可以通过清单来完成,但我找不到任何关于设置清单的好信息。理想的解决方案是允许以32位或64位模式编译,并以正确的mscoree.dll为目标 作为补充说明,我在一个并排文件夹中找到了一个mscoree.dll,我验证了它是64位模式,并将其复制到我的应用程序目录中,希望它能首先获取该文件。这不起作用,C:\Windows\System32版本仍在加载 谢谢 马克斯 C++/CLI dll上CorFlags.exe的输出 在C:\System32\mscoree.dll上输出pedump.exe (pedump从这里开始描述进口和出口,但这在这里并不重要) 扩展加载信息 这是失败加载的完整输出 注意:C++/CLI dll称为DsfClr.dllC++ cli 加载库193 我正在创建一个C++或CLI DLL,它将被加载到一个传统的C++应用程序中。遗留应用程序通过对LoadLibrary的传统调用来实现这一点。应用程序和C++/CLI dll均以64位模式编译,c++-cli,64-bit,manifest,mscorlib,C++ Cli,64 Bit,Manifest,Mscorlib,当LoadLibrary调用发生时,它失败并出现错误193。这通常意味着某些非64位组件正在尝试加载。在visual studio 2010中查看dll加载输出时,我看到加载mscoree.dll时发生故障(确切地说,我看到加载了我的dll,然后加载了mscoree,然后卸载了mscoree,然后卸载了我的dll,然后返回错误)。特别是C:\Windows\System32\mscoree.dll正在加载,当我检查这个mscoree.dll时,我发现它的目标是I386 如何确保我的应用程序链接到
输出是通过运行gflags.exe-i[exename]+sls并在调试器中检查结果获得的 更新: 使用Reuben在下面的评论中发布的提示,我能够确定mscoree.dll确实针对AMD64,但pedump提供的信息无效,因为它正在WOW64中运行。尽管如此,我仍然无法加载此库,如果任何人有任何建议,将不胜感激
我还尝试了一件事:我创建了一个新的C#应用程序并引用了C++/CLI dll,然后在main()函数中,我在C++/CLI dll中实例化了一个类。这导致在调用main()函数之前发生访问冲突异常。当我删除实例化时,主函数运行良好。我的猜测是,实例化导致了我的C++/CLI程序集的延迟加载,这与我在本机程序集中看到的加载错误相同。如果有人遇到此错误,结果表明它是由我的本机库使用boost::threading引起的。线程库使用了一些奇怪的编译设置。结果是静态库与clr或混合模式二进制文件不兼容。当然,VisualStudio对此一无所知,所以它很高兴地将boost链接进来,并在加载dll时崩溃
解决方案是在boost::threading中动态链接。最简单的方法是在项目设置中定义BOOST\u THREAD\u DYN\u链接。一旦我定义了它,dll就可以正常加载了
在google上快速搜索C++/CLI boost threading将提供有关此错误的更多信息我只是有一个类似的场景。 LoadLibrary失败,错误为193。 My DLL是一个托管的C++/CLI DLL,通过LoadLibrary从本机应用程序调用 然而,我只在win7系统上得到错误。它在win10上加载良好。这个原始问题的日期表明它是win7 我把它缩小到一个本地类。 win7似乎只支持基本类型,例如C指针作为本地线程。任何更复杂的东西,即使是win10接受的std::shared_ptr,在加载Dll时都会生成错误193
请注意,编译器是VS2015,代码样式是c++11。+1为这种情况下的问题提供了答案,谢谢!
Microsoft (R) .NET Framework CorFlags Conversion Tool. Version 4.0.30319.1
Copyright (c) Microsoft Corporation. All rights reserved.
Version : v4.0.30319
CLR Header: 2.5
PE : PE32+
CorFlags : 16
ILONLY : 0
32BIT : 0
Signed : 0
PS C:\Windows\System32> pedump.exe .\mscoree.dll
Dump of file .\MSCOREE.DLL
File Header
Machine: 014C (I386)
Number of Sections: 0004
TimeDateStamp: 4B90752B -> Thu Mar 04 22:06:19 2010
PointerToSymbolTable: 00000000
NumberOfSymbols: 00000000
SizeOfOptionalHeader: 00E0
Characteristics: 2102
EXECUTABLE_IMAGE
32BIT_MACHINE
DLL
...