使用Microsoft Visual C#2010 Express加载DLL

时间:2012-10-14 20:37:00

标签: c# visual-studio-2010 dll visual-studio-express

我正在使用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和/或将其添加到项目中?我做错了什么?

  3. 最后,我尝试添加x86和x64版本,调试和发布。同样无法每次添加作为参考。

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:0)

实际上,答案似乎在消息的第一行: 无法加载DLL' VCECLB.dll':找不到指定的模块。 (HRESULT的例外情况:0x8007007E 它说它找不到DLL,而不是DLL不兼容。 DLL应与程序中的其他DLL一起定位,并且您需要将DLL添加到解决方案中。

如果有可能将DLL编译为Native C / C ++(即非.NET样式),则可以从.NET样式的C / C ++调用它,但不能调用C#例程。

因此,如果问题是可以找到但未加载模块,则需要编写C ++(.NET)例程以从C#例程(.NET)调用以调用C ++(非.NET)。

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