加载DLL与Microsoft Visual C#2010速成(Loading DLLs with

2019-09-24 03:18发布

我使用的是微软的C#2010速成从Imperx的在有了FrameLink快递司机。 当我尝试加载在运行时的DLL,我得到一个异常:

无法加载DLL“VCECLB.dll”:指定的模块找不到。 (从HRESULT异常:0x8007007E)

如果我尝试将DLL添加为一个参考,我得到这个消息:

为“C:\\ VCECLB.dll” A参考无法添加。 请确保该文件是可访问的,并且它是一个有效的程序集或COM组件。

两个问题:

  1. 这是一个快速的问题(即一定的局限性与快递引起的问题)? 我相信,该DLL的来源是用C ++写的,但我不认为这事。

  2. 有没有引用DLL和/或将其添加到项目中以不同的方式? 这是我做错了吗?

最后,我试着将两个x86和x64版本,调试和发布。 同样的故障,每次添加作为参考。

Answer 1:

该DLL似乎并没有被.NET(也不COM)代码 - 因此你不能加载它,也没有添加对它的引用。

没有任何与您的快速版本 - 它只是不是一个.NET“兼容” DLL,因此无法加载或引用它。

为了使用它的功能,你可能不得不潜入调用.NET从原始的C ++代码的更加“神秘”(和更详细的,更复杂的)方法 - 或者找到它的.NET兼容对应或版本。



Answer 2:

其实,答案似乎是在消息的第一行:无法加载DLL“VCECLB.dll”:指定的模块找不到。 (异常来自HRESULT:0x8007007E它说,它无法找到该DLL,而不是该DLL是不兼容的DLL应位于与程序的其他DLL,你需要的DLL添加到解决方案。

如果由于某些原因的DLL编译为本地C / C ++(即不.NET的风格),它可以从C / C ++是一个.NET的风格被调用,而不是一个C#程序。

因此,如果这个问题是该模块可以找到,但没有加载,你需要写一个C ++(.NET)例程从C#程序(.NET)调用C ++(不是.NET)调用。

直接对话,以硬件所有代码都必须在一定程度上做到这一点。 最让你使用多个DLL做到这一点的。



文章来源: Loading DLLs with Microsoft Visual C# 2010 Express