【问题标题】:How to use vb6 dll function in c# .net using 4.6.1 framework如何使用4.6.1框架在c#.net中使用vb6 dll函数
【发布时间】:2020-04-16 15:38:24
【问题描述】:

我已经创建了 ActiveX dll 类型的 VB6 项目添加了两个功能

 Public Function Name(aName As String)
MsgBox ("Your Name is " & aName)
End Function

Public Function TestName(aName As String) As String
TestName = " Hello  " & aName
End Function

从同一个项目创建的 DLL。

然后使用以下命令创建 Wrapper。

C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 工具>TlbImp.exe C:\Test\TestActiveX\Project1.dll /out: C:\Test\ TestActiveX\out\Project1.dll

如果我只执行上述操作,那么我不会在 COM 部分获取 Project1.dll 但后来我使用下面的代码注册 dll

C:\WINDOWS\system32>regsvr32 C:\Test\TestActiveX\Project1.dll

那么只有我在 Visual Studio 添加引用对话框的 COM 部分下获取 dll

我也尝试从 C:\Test\TestActiveX\out\Project1.dll 文件夹添加引用,但每次我得到如下运行时错误。

System.Runtime.InteropServices.COMException: '检索具有 CLSID {ID} 的组件的 COM 类工厂失败,原因是以下错误:80040154 未注册类(来自 HRESULT 的异常:0x80040154 (REGDB_E_CLASSNOTREG))。'

public string ReturnFromCOM()
    {
        TestClass testClass = new TestClass();
        return testClass.TestName(" Hello ");
    }

我无法完成,不知道此步骤中缺少什么。 我的 Windows 操作系统:64 位 视窗 10 Framework 4.6.1 和 4.8.1,但使用 Framework 4.6.1 创建控制台应用程序

我什至尝试将项目目标更改为 x64/x86/anyCPU,但它根本不起作用。

【问题讨论】:

  • 当您在 VB6 中编译时,它会自动为您注册 DLL。此外,当您在 Visual Studio (C#) 中选择该 VB6 DLL 作为参考时,它会自动为您执行所有导入步骤。您正在做的一些额外的手动工作可能会带来问题。

标签: .net com vb6


【解决方案1】:

检查您的 VB6 TestClass 实例是否设置为“MultiUse”

还可以尝试从另一个 VB6 项目引用您的 VB6 dll,并尝试使用与 C# 函数 ReturnFromCOM 相同的代码(转换为 VB6)。

【讨论】:

猜你喜欢
  • 2011-12-01
  • 2011-07-17
  • 2011-05-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-10
  • 2019-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多