c++ - 在 C++ CLI 中加载托管 DLL,具体取决于 native dll

标签 c++ .net c++-cli dll

遵循 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/

相关文章:

c++ - 如何移动相机并将其粘贴到播放器上?

android - boost Android Asio 连接错误

c# - If 语句 With 是关键字并与 Null 进行比较

c# - C++/CLI 混合托管/ native DLL 将无法工作

C++ |如何在每次不返回值的情况下循环 If 语句

c++ - 基于面板的Qt界面

c# - 将对象转换为正确的类型

.net - SQL Server 存储过程引发多个错误

visual-studio-2010 - 无法获取 Mat 的列数和行数

c++ - 无法将参数 1 从 'cli::interior_ptr<Type>' 转换为 'CvCapture **'