我在VB6程序中使用VB.NET DLL时遇到问题。我已经使用GuidAttribute创建了我的dll,使用RegAsm创建了一个tlb并将其添加到我的VB6程序的引用中。问题是当我尝试使用CreateObject函数创建对象时,但是以下错误显示“ActiveX组件无法创建对象。”
我不知道我是否遗漏了VB.NET上的任何声明,将其用作dll,或者我没有正确使用CreateObject函数。
答案 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选项。