我正在使用Microsoft C#2010 Express和Imperx的FrameLink Express驱动程序。当我尝试在运行时加载DLL时,我得到一个例外:
无法加载DLL“VCECLB.dll”:指定的模块无法加载 找到。 (HRESULT异常:0x8007007E)
如果我尝试添加DLL作为参考,我收到此消息:
无法添加对“C:\\ VCECLB.dll”的引用。请 确保该文件可以访问,并且它是一个有效的程序集 或COM组件。
两个问题:
这是Express问题(即Express导致问题的一些限制)?我相信DLL的源代码是用C ++编写的,但我认为这不重要。
是否有不同的方法来引用DLL和/或将其添加到项目中?我做错了什么?
最后,我尝试添加x86和x64版本,调试和发布。同样无法每次添加作为参考。
答案 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为你做这件事。