代码之家  ›  专栏  ›  技术社区  ›  Little Fox

如何在.NET中使用VB6DLL中的方法?

  •  2
  • Little Fox  · 技术社区  · 6 年前

    我有ActiveX VB6 DLL(无法访问其源代码),希望调用方法“GetUnitInfo”

    我以前是这样导入的:

    [DllImport(@"C:\Users\R\Documents\lab.dll")]
    public static extern long GetUnitInfo(String strRequest, String strInfo, String strName);
    

    但我有个例外:

    我也尝试过加载它:

    Assembly myAssembly ;
    myAssembly = Assembly.LoadFile("C:\\Users\\R\\Documents\\lab.dll");
    

    模块应包含程序集清单(HRESULT异常:0x80131018)

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

    1 回复  |  直到 6 年前
        1
  •  7
  •   Visual Vincent    6 年前

    找到解决方案,其他人会发现有用的(这在我的案例中是有效的):

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

      1.1以管理员身份运行CMD

      cd C:\Program Files\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\ (就我而言)。

      TlbImp.exe C:\path_to_old.dll \out: new.dll

    2. 注册ActiveX dll

      2.1以管理员身份运行CMD

      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\u E\u CLASSNOTREG))

    你也会发现这篇文章很有用

    C-Sharp-and-activex-dll

    Error adding reference to dll: Solution tlbimp.exe