首页 > 解决方案 > 如何在 .NET 中使用来自 VB6 dll 的方法?

问题描述

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

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

标签: c#vb.netvb6dllimport

解决方案


找到解决方案,其他人会觉得有用,(这在我的情况下有效):

  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

添加对 dll 的引用时出错:解决方案 tlbimp.exe


推荐阅读