在C#中解析一个C++程序集

问题描述 投票:-1回答:1

我有一个C# WPF项目,我需要在其中添加一些C++ dll来使用在它里面实现的函数,如果我直接使用

MyClassinDll myc = new MyClassinDll();

我得到多个not resolve file not found异常,dll的作者建议我使用

AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(ResolveAssembly);

在加载C++ dll时,因为该c++ dll有其他c++ dll作为依赖。

能否使用C++ dll类、函数而不进行反射?

并且像这样使用 mvc.MyMethod(a,b,c) 直接,因为反射需要时间和复杂的引用?

c# c++ assembly dll assembly-resolution
1个回答
1
投票

我假设MyClassinDll定义在一个管理的dll中,你有一个静态引用。如果这个文件没有加载,一个可能的解释是它依赖于其他无法加载的非托管dll文件。反射不能解决这个问题,因为代码仍然必须以某种方式被加载。

如果你想加载一个非托管的dll文件,你通常会使用 dllImport

编辑:未管理的dlls是由链接器根据 检索顺序. 第一个位置通常是 "应用程序加载的目录"。问题通常是找出缺少什么dlls

一个可能的候选人是 VS c++运行时这应该和你正在使用的库一起打包。对于本地的依赖关系来说,寻找丢失的dlls是比较复杂的。经典的工具是 依赖性步行者但也有其他的。也可以使用 流程监控,查找失败的解决方案. 或者要求库的供应商提供正确的库的安装和使用说明。在联系供应商时,确切地知道缺少哪些dlls会有帮助,但不应该是必需的。如果需要的话,可以要求提供一个使用该库的最小的应用程序来证明它的工作。

请注意,当采取关于汇编和dlls的时候,只有 "native "和 "managed "的区分是相关的。C++可能用来写一个托管的汇编,也可能用来写一个本地的汇编。所以,具体一点是有帮助的。

© www.soinside.com 2019 - 2024. All rights reserved.