我有一个C# WPF项目,我需要在其中添加一些c ++ dll以使用其中实现的函数。 如果我直接使用
MyClassinDll myc = new MyClassinDll();
我得到多个未解决文件未找到异常,dll 的作者建议我使用
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(ResolveAssembly);
加载C++ DLL,因为该 C++ DLL 具有其他 C++ DLL 作为依赖项。
是否可以使用C++dll类,函数而不反射?
并像mvc.MyMethod(a,b,c(一样直接使用它,因为反射需要时间和复杂的参考?
我假设 MyClassinDll 是在您具有静态引用的托管 dll 中定义的。如果此文件未加载,可能的解释是它依赖于无法加载的其他非托管 dll 文件。反射不能解决此问题,因为代码仍然必须以某种方式加载。
如果要加载非托管 dll,通常使用 dllImport
编辑: 链接器根据搜索顺序加载非托管 dll。第一个位置通常是"从中加载应用程序的目录"。问题通常是找出缺少哪些dlls
一个可能的候选者是VS c ++运行时,它应该与您正在使用的库打包在一起。对于本机依赖项,查找缺少的 dll 会稍微复杂一些。经典的工具是依赖步行者,但还有其他工具。也可以使用进程监视器来查找失败的解决方案。或者要求库的供应商为库提供正确的安装和使用说明。在联系供应商时,确切地知道缺少哪些 dll 会有所帮助,但不应要求这样做。如果需要,请请求使用该库的最小应用程序来证明其工作。
请注意,在处理程序集和 dll 时,只有相关的"本机"和"托管"区别。C++可用于编写托管程序集或本机程序集。因此,具体化会有所帮助。