遵循 a similar SO question 中提出的解决方案,我想在 C++ CLI 应用程序(或 C# 中加载一个相当复杂的 dll 文件)。目标体系结构始终设置为 64 位。
此应用程序中要使用的 .dll 是在另一个项目中生成的,它是使用原生 C++ 库(例如 Ogre、Boost 等)在 C++ CLI 中编写的,并且依赖于它自己的 dll(它们都已编译适用于 64 位平台)。这些依赖 dll 与使用它们的讨厌的 .dll 一起复制到我的应用程序的输出文件夹中。
但是,当到达这条线时:
Assembly^ SampleAssembly;
SampleAssembly = Assembly::LoadFrom( "E:\\x64\\Debug\\OgreWrapper.dll" );
输出控制台显示:
'DumbTestCLR.exe': Loaded 'E:\x64\Debug\OgreWrapper.dll', Symbols loaded.
'DumbTestCLR.exe': Unloaded 'E:\x64\Debug\OgreWrapper.dll'
并抛出一些致命的未捕获异常:
First-chance exception at 0x000007fefe32cacd (KernelBase.dll) in DumbTestCLR.exe: Microsoft C++ exception: EEFileLoadException * __ptr64 at memory location 0x0016d588..
First-chance exception at 0x77cace3b (ntdll.dll) in DumbTestCLR.exe: 0xC0000005: Access violation reading location 0xffffffffffffffff.
First-chance exception at 0x77cace3b (ntdll.dll) in DumbTestCLR.exe: 0xC0000005: Access violation reading location 0xffffffffffffffff.
First-chance exception at 0x77cace3b (ntdll.dll) in DumbTestCLR.exe: 0xC0000005: Access violation reading location 0xffffffffffffffff.
因为没有建议given here应用(即不是因为应用程序和 dll 之间的位数冲突),问题的根源可能是什么?我怀疑 dll 无法加载其他( native )dll 并因此导致崩溃,但是如果可能是这种情况,如何检查哪些 dll 导致了问题?
很抱歉这个问题很长,而且可能是个愚蠢的问题..
最佳答案
使用 Dependency Walker 查看 dll 的依赖项是否都存在。
关于c++ - 在 C++ CLI 中加载托管 DLL,具体取决于 native dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11613061/