我正在使用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?
答案 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开关中部署