我想在VB6程序中使用VB.NET DLL。可能吗?

时间:2010-02-12 17:48:29

标签: vb.net dll vb6

我在VB6程序中使用VB.NET DLL时遇到问题。我已经使用GuidAttribute创建了我的dll,使用RegAsm创建了一个tlb并将其添加到我的VB6程序的引用中。问题是当我尝试使用CreateObject函数创建对象时,但是以下错误显示“ActiveX组件无法创建对象。”

我不知道我是否遗漏了VB.NET上的任何声明,将其用作dll,或者我没有正确使用CreateObject函数。

3 个答案:

答案 0 :(得分:2)

关于从Visual Basic 6调用.Net类的完整文章: http://www.devsource.com/c/a/Using-VS/Calling-Net-Classes-from-Visual-Basic-6/

使用VS 2005创建COM DLL:演练: http://www.codeproject.com/KB/COM/VS2005ComDllWalkThru.aspx

答案 1 :(得分:0)

你必须确保你的组件正确注册了com interop ..在项目属性选项卡中有一个复选框选项用于启用它,你在正确的路径上创建一个你可以在vb6中引用的类型库,您可以像任何其他com compnent一样简单地添加对它的引用。但实际上是注册它而不是创建一个tlb文件。

注册程序集以供COM使用时,Regasm.exe会将条目添加到本地计算机上的注册表中。更具体地说,它创建了依赖于版本的注册表项,允许同一程序集的多个版本在计算机上并排运行。第一次注册程序集时,会为程序集创建一个顶级键,并为特定版本创建唯一的子项。每次注册新版本的程序集时,Regasm.exe都会为新版本创建一个子项。

使用Regasm.exe注册程序集后,可以将其安装在全局程序集缓存中,以便可以从任何COM客户端激活它。如果程序集仅由单个应用程序激活,则可以将其放在该应用程序的目录中。

如果您对该工具为注册表使用生成的内容感兴趣

regasm {大会之路} .dll /regfile:myTest.reg

答案 2 :(得分:0)

很难说你提供的信息,但听起来你没有让组件可以找到。来自MSDN

  

在HKCR \ CLSID {0000 ... 0000}键下,   默认值设置为ProgID   该类,以及两个新命名   添加了值,类和程序集。   运行时读取Assembly值   从注册表中传递给它   运行时程序集解析程序。该   程序集解析器尝试定位   装配,基于装配   名称和信息等信息   版本号。对于组装   解析器找到一个组件,   组装必须在其中一个   以下地点:

     

全局程序集缓存(必须是   强名的集会)。

     

在应用程序目录中。   从应用程序加载的程序集   路径只能从那里访问   应用

     

沿着指定的文件路径   Regasm.exe的/ codebase选项。