代码之家  ›  专栏  ›  技术社区  ›  Gregory Higley

如何在VB6中以编程方式列出对象的属性?

  •  2
  • Gregory Higley  · 技术社区  · 14 年前

    我的一个朋友正在做一个传统的vb6项目。我已经十年没有接触过那门语言了,所以我很生疏。不管怎样,有吗 任何 对vb6的反射API?具体来说,他需要一种迭代用户创建的类的属性(和类型)的方法。(换句话说,不是外部COM对象,而是内部的“类模块”(如它所称)。

    怎么能做到?

    2 回复  |  直到 14 年前
        1
  •  4
  •   Community miroxlav    7 年前

    杰伊 answer 如果您的项目是ActiveX(ActiveX exe、dll或OCX,而不是标准的exe),则该方法是否可行? 如果类是公共的。

    但是,您提到您的朋友希望使用“内部类模块”来实现这一点。我不确定你是指私人 .cls 文件(类),或 .bas 文件(模块),但无论哪种方式,都只能使用 类型库信息对象库 反思 公众的 类、用户定义的类型、常量或枚举。

    不能使用库来反映模块、私有类或声明为私有的任何其他内容。

    作为一般的经验法则,在从另一个项目查看项目内容时,只能对在对象浏览器中可以看到的内容使用反射。也就是说,如果编译项目、创建新项目、添加第一个项目作为引用,然后在对象浏览器中查看第一个项目的内容,则可以通过 类型库信息对象库 . 如果对象浏览器中没有列出某些内容,则无法使用 类型库信息对象库 来反映它。

    vb6没有任何内置的运行时反射或内省支持。使用 类型库信息对象库 因为ActiveX项目是在带有嵌入类型库的COM组件中编译的,所以反射对ActiveX VB6项目有效,但是正如前面提到的,您只能访问在已编译组件的类型库中公开的数据类型。使用对象浏览器可以快速确定类型库中的内容,因为只要从 分离 项目(如果从自己的vb6项目查看组件,它将显示公共和私有数据结构,即在IDE中可见的所有内容)。

        2
  •  2
  •   Community miroxlav    7 年前

    这是你要找的东西吗?

    Visual Basic: Inspect COM Components Using the TypeLib Information Object Library

    在这里我们将讨论这个话题,所以: Self Inspection of VB6 UDTs

    我自己从来没有试过这种东西。