如何从.NET中的VB6 dll使用方法?

时间:2018-09-27 15:37:12

标签: c# vb.net vb6 dllimport

我具有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)

我试图清理解决方案,关闭项目选项中的清单,创建新的清单文件,但这并没有帮助我...

1 个答案:

答案 0 :(得分:5)

找到了解决方案,mb其他人也会发现有用的方法(在我的情况下有效)

  1. 创建VB6 ActiveX dll的.Net包装器

    1.1以管理员身份运行CMD

    1.2移至.NET SDK文件夹-cd C:\Program Files\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\(在我的情况下)。

    1.3运行-TlbImp.exe C:\path_to_old.dll \out: new.dll

  2. 注册ActiveX dll

    2.1以管理员身份运行CMD

    2.2运行-regsvr32.exe C:\path_to_old.dll

  3. 在c#项目中添加对转换后的dll(“ new.dll”)的引用

我以前在注册“ old.dll”之前添加了“ new.dll”引用,并且遇到了以下异常

  

由于以下错误,检索具有CLSID {F2D4F4E5-EEA1-46FF-A83B-A270C92DAE4B}的组件的COM类工厂失败:80040154类未注册(HRESULT异常:0x80040154(REGDB_E_CLASSNOTREG))

清洁解决方案,删除参考并遵循步骤2,3-帮助

您可能还会发现这篇文章有用

C-Sharp-and-activex-dll

Error adding reference to dll: Solution tlbimp.exe