【发布时间】:2019-03-03 13:55:56
【问题描述】:
我有 ActiveX VB6 DLL(无法访问其源代码),并且想要调用方法“GetUnitInfo”
我用这样的方式导入它:
[DllImport(@"C:\Users\R\Documents\lab.dll")]
public static extern long GetUnitInfo(String strRequest, String strInfo, String strName);
但我得到一个例外:
无法在 DLL 中找到名为“GetUnitInfo”的入口点
我也尝试过加载它:
Assembly myAssembly ;
myAssembly = Assembly.LoadFile("C:\\Users\\R\\Documents\\lab.dll");
但遇到异常
该模块应包含程序集清单。 (HRESULT 异常:0x80131018)
我已经尝试清理解决方案,关闭项目选项中的清单,创建新的清单文件,但它没有帮助我......
【问题讨论】:
-
这是 VB.NET 还是 VB6 DLL?对于 VB.NET DLL,您只需右键单击
Solution Explorer中的项目,按Add Reference...并找到 DLL。DllImport仅在您想调用 native DLL(如用 C、C++ 或 VB6 等编译的 DLL)中的函数时使用 -
如果是 VB.Net dll,他不会收到关于缺少清单的错误。
-
如果它是 VB6 dll,将没有入口点,因为 VB6 生成了 ActiveX dll。 (在 VB6 中可以使用导出函数生成本机 dll,但这需要编写时髦的代码并拦截对链接器的调用,
link.exe。) -
不幸的是,我从来没有在 .NET 中使用过 VB6 DLL,所以我没有更多的建议......你在什么程序中反编译了它?如果它是一个 .NET DLL,它应该可以被 ILSpy 反编译。
-
如果它是一个 VB 经典 dll,那么您应该能够将它添加为 COM 引用并使用内置的 COM 互操作机制来处理它。 (它起源于经典 VB 的伟大之处在于,它几乎肯定不会做任何内置互操作机制不知道如何处理的有趣技巧......)