【发布时间】: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 作为参考时,它会自动为您执行所有导入步骤。您正在做的一些额外的手动工作可能会带来问题。