首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CreateObject vb6

CreateObject vb6
EN

Stack Overflow用户
提问于 2011-01-20 21:58:39
回答 3查看 2.7K关注 0票数 1

我正在工作的一个现有的应用程序是在VB6中,这是调用.NET动态链接库。但是,当从VB6应用程序调用我的.NET代码时,它没有反映出来。我已经在.NET应用程序中添加了一个公共属性,但当我尝试访问它时,VB6引发了一个异常:

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

我的PostBuild事件代码。

代码语言:javascript
复制
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代码

代码语言:javascript
复制
Set frmApp = CreateObject("AssemblyName.Class1")

我需要做任何其他设置吗?

如何在VB6中设置对新分类的引用?

EN

回答 3

Stack Overflow用户

发布于 2011-01-20 22:21:19

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

如果clsid没有更改,则不必注销并重新注册您的类。

在重新注册之后,您还需要将VB6中的引用设置为新的分类in。VB6使用clsid来搜索组件。

注释后的

VB6是很久以前的事了。我不知道“参考”是不是正确的术语。但您应该删除对旧库的依赖。并向新对象添加依赖项,就像您第一次做的那样。

票数 3
EN

Stack Overflow用户

发布于 2011-01-21 00:17:58

“不反省”是非常不清楚的。但是如前所述,这些regasm.exe命令不足以让VB6程序找到程序集。如果它没有抱怨创建类对象,那么您在过去的一段时间里使用过gacutil.exe。GAC包含您的DLL的旧副本。您必须使用gacutil.exe /u删除该旧副本

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

票数 1
EN

Stack Overflow用户

发布于 2011-01-21 22:13:24

完成了..。我只需将我的动态链接库复制到C:\Program Files\Microsoft Visual Studio\VB98中,它的工作不需要部署在GAC或/Codebase交换机中

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4747994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档