我正在工作的一个现有的应用程序是在VB6中,这是调用.NET动态链接库。但是,当从VB6应用程序调用我的.NET代码时,它没有反映出来。我已经在.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中设置对新分类的引用?
发布于 2011-01-20 22:21:19
您可以使用ProgId attribute标记您的.Net类。这将防止您的clsid在每次编译时都发生变化。
如果clsid没有更改,则不必注销并重新注册您的类。
在重新注册之后,您还需要将VB6中的引用设置为新的分类in。VB6使用clsid来搜索组件。
注释后的
VB6是很久以前的事了。我不知道“参考”是不是正确的术语。但您应该删除对旧库的依赖。并向新对象添加依赖项,就像您第一次做的那样。
发布于 2011-01-21 00:17:58
“不反省”是非常不清楚的。但是如前所述,这些regasm.exe命令不足以让VB6程序找到程序集。如果它没有抱怨创建类对象,那么您在过去的一段时间里使用过gacutil.exe。GAC包含您的DLL的旧副本。您必须使用gacutil.exe /u删除该旧副本
修改regasm.exe命令行,添加/codebase选项,使其始终使用构建目录中的DLL副本,而不是在GAC中查找DLL。
发布于 2011-01-21 22:13:24
完成了..。我只需将我的动态链接库复制到C:\Program Files\Microsoft Visual Studio\VB98中,它的工作不需要部署在GAC或/Codebase交换机中
https://stackoverflow.com/questions/4747994
复制相似问题