2011-01-20 64 views
1

我正在调用.NET DLL的VB6中的现有应用程序。 但我的.NET代码没有反映什么时候从VB6应用程序调用它。 我在.NET应用程序添加一个公共propertt但是当我尝试访问它,VB6引发一个异常:CreateObject 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?

+1

你是什么意思“的意思,但代码从VB6调用时不反映?“。发布您用于实例化对象的代码。 – mdm 2011-01-20 14:20:00

+0

你有没有尝试添加/ codebase到你的RegAsm命令? – 2015-04-16 04:41:56

回答

3

您可以用ProgId attribute标记您的.Net类。这会阻止你每次编译时改变你的clsid。

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

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

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

+0

如何在VB6中将引用设置为新的classid? – gauravghodnadikar 2011-01-21 06:48:22

+0

@GvS @gauravghodnadikar“参考”是正确的术语。在VB6 IDE中,使用菜单命令Project-References访问对话框 – MarkJ 2011-01-21 08:51:12

1

“不反映”是不清楚。但是,如发布,这些regasm.exe命令是而不是足以让VB6程序找到程序集。如果它没有抱怨创建类对象,那么你在过去的某段时间使用过gacutil.exe。并且GAC包含您的DLL的旧副本。您将不得不删除旧的副本,请使用gacutil.exe/u

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

0

完成......我只是复制我的DLL到C:\ Program Files文件\微软的Visual Studio \ VB98及其工作没有必要在GAC部署或/代码库切换