2

我正在使用 Microsoft C# 2010 Express 和 Imperx 的 FrameLink Express 驱动程序。当我尝试在运行时加载 DLL 时,出现异常:

无法加载 DLL 'VCECLB.dll':找不到指定的模块。(HRESULT 例外:0x8007007E)

如果我尝试添加 DLL 作为参考,我会收到以下消息:

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

两个问题:

  1. 这是 Express 问题(即 Express 的某些限制导致问题)?我相信 DLL 的源代码是用 C++ 编写的,但我认为这并不重要。

  2. 是否有不同的方式来引用 DLL 和/或将其添加到项目中?我做错了什么?

最后,我尝试添加 x86 和 x64 版本、调试和发布。每次都无法添加为参考。

4

2 回答 2

4

该 DLL 似乎不是 .NET(也不是 COM)代码 - 因此您无法加载它,也无法添加对它的引用。

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

为了使用它的功能,您可能必须深入研究从 .NET 调用原始 C++ 代码的更“神秘”(以及更精细和更复杂)的方法 - 或者找到与 .NET 兼容的对应物或版本。

于 2012-10-14T20:42:26.263 回答
0

实际上,答案似乎在消息的第一行: Unable to load DLL 'VCECLB.dll': The specified module could not be found。(来自 HRESULT:0x8007007E 的异常它说它找不到 DLL,而不是 DLL 不兼容。DLL 应该与您的程序的其他 DLL 一起定位,您需要将 DLL 添加到解决方案中。

如果某个 DLL 被编译为 Native C/C++(即非 .NET 样式),则可以从属于 .NET 样式但不是 C# 例程的 C/C++ 调用它。

因此,如果问题是模块可以找到但无法加载,您需要编写一个 C++ (.NET) 例程从您的 C# 例程 (.NET) 调用 C++ (Not .NET)。

所有直接与硬件对话的代码都必须在某种程度上做到这一点。大多数人使用多个 DLL 为您执行此操作。

于 2016-10-19T15:56:11.697 回答