遵循a similar SO question中提出的解决方案,我想在C ++ CLI应用程序中加载一个相当复杂的dll文件(或者事实上是C#)。目标体系结构始终设置为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适用(即不是因为app和dll之间的比特冲突),问题的根源是什么?我怀疑dll无法加载其他(本机)dll因此崩溃,但如何检查哪些dll导致问题,如果可能是这种情况?
抱歉这个长期的问题,也许是一个愚蠢的问题......