CreateObject vb6

时间:2011-01-20 13:58:39

标签: .net com vb6

我正在使用VB6中的现有应用程序调用.NET DLL。 但我的.NET代码没有反映从VB6应用程序调用它。 我在.NET应用程序中添加了一个公共属性,但是当我尝试访问它时,VB6引发了异常:

“对象不支持此属性或方法”

我的PostBuild事件代码。

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe $(ProjectDir)bin\$(TargetName).dll  /regfile:$(TargetName).reg
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe $(ProjectDir)bin\$(TargetName).dll  /tlb:$(TargetName).tlb

我可以看到注册表CLSID正在发生变化。 但是从VB6调用时代码没有反映出来 (对象不支持此属性或方法)

VB6代码

Set frmApp = CreateObject("AssemblyName.Class1")

我是否需要进行任何其他设置?

如何将VB6中的引用设置为新的classid?

3 个答案:

答案 0 :(得分:3)

您可以使用ProgId attribute标记.Net类。这样可以防止每次编译时clsid都发生变化。

如果clsid没有改变,你不必取消并重新注册你的课程。

重新注册后,还需要将VB6中的引用设置为新的classid。 VB6使用clsid来搜索组件。

评论后
VB6已经很久以前了。我不知道“参考”是否是正确的术语。但是你应该删除旧库上的依赖项。并且像第一次那样添加新的依赖项。

答案 1 :(得分:1)

“没有反映”非常不清楚。但是发布后,这些regasm.exe命令足以让VB6程序找到程序集。如果它没有抱怨创建类对象,那么你过去曾经使用过gacutil.exe。 GAC包含DLL的旧副本。您必须删除该旧副本,使用gacutil.exe / u

修改regasm.exe命令行,添加/ codebase选项,使其始终在构建目录中使用DLL的副本,而不是在GAC中查找DLL。

答案 2 :(得分:0)

完成...我只是将我的DLL复制到C:\ Program Files \ Microsoft Visual Studio \ VB98,其工作无需在GAC或/ Codebase开关中部署