【问题标题】:CreateObject vb6创建对象 vb6
【发布时间】:2011-06-12 11:46:17
【问题描述】:

我正在开发一个在 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的引用?

【问题讨论】:

  • “但是从 VB6 调用时代码没有反映?”是什么意思。发布您用于实例化对象的代码。
  • 您是否尝试将 /codebase 添加到您的 RegAsm 命令中?

标签: .net com vb6


【解决方案1】:

您可以使用ProgId attribute 标记您的.Net 类。这将防止每次编译时更改 clsid。

如果 clsid 没有更改,您不必取消和重新注册您的课程。

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

评论后
VB6 已经很久了。我不知道“参考”是否是正确的术语。但是您应该消除对旧库的依赖。并像第一次一样为新添加一个依赖项。

【讨论】:

  • 如何在VB6中设置对新classid的引用?
  • @GvS @gauravghodnadikar “参考”是正确的术语。在 VB6 IDE 中使用菜单命令 Project-References 访问对话框
  • @MarkJ,谢谢。就像我认为的 VBA(Word 宏)一样。
  • 我添加了对 .tlb 文件的引用,但我仍然无法以 >net 形式查看我的更改。我可以调试这个 DLL 从哪个位置加载。
  • 通过Registry可以找到与类名相关联的ClsID。通过这个 ClsID,您可以找到它指向的库。
【解决方案2】:

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

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

【讨论】:

  • 我仍然遇到同样的错误。 1)我已经使用 RegAsm.exe /regfile 构建了我的 .Net 代码 2)RegAsm.exe /tlb(未使用代码库开关) 3)复制新的 DLL 与 VBP 相同的文件夹 4)根据新更改和尝试时不会更改表单访问新创建的道具然后得到错误对象不支持此属性或方法
  • @gauravghodnadikar 你仔细阅读汉斯的回答了吗? VB6 不会从 VBP 目录或其他任何地方调用 DLL 的本地副本,它要求它们在 GAC 中注册(见后面的注释)。因此,您必须在 GAC 中有一份旧副本。您需要注销它gacutil.exe /u,然后使用“/codebase”注册新的。 (注意)你可以使用 manifest 来说服 VB6 从本地目录加载 DLL,但这有点高级,我建议你先让它工作,然后再回来。
  • 完成...我将我的 DLL 复制到 C:\Program Files\Microsoft Visual Studio\VB98 并且它的工作不需要部署在 GAC 或 /Codebase 开关中
【解决方案3】:

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

【讨论】:

  • 不得不在每台运行你的代码的机器上安装 Visual Studio 有点糟糕。
猜你喜欢
  • 1970-01-01
  • 2012-03-27
  • 2010-12-16
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
相关资源
最近更新 更多