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

时间:2010-04-16 22:42:53

标签: reflection vb6

我的一位朋友正在研究传统的VB6项目。我十年没碰过那种语言,所以我很生气。无论如何,是否有任何类型的VB6反射API?具体来说,他需要一种方法来迭代用户创建的类的属性(和类型)。 (换句话说,不是外部COM对象,而是内部的“类模块”。)

如何做到这一点?

2 个答案:

答案 0 :(得分:4)

如果您的项目是ActiveX(ActiveX EXE,DLL或OCX,而不是标准EXE),(如果类是公共的),Jay的answer是要走的路。

但是,你提到你的朋友想用“内部类模块”来做这件事。我不确定您是指私有.cls文件(类)还是.bas文件(模块),但不管怎样,您只能使用 TypeLib信息对象库反映 public 类,用户定义的类型,常量或枚举。

您无法使用该库来反映模块,私有类或其他任何声明为私有的内容。

作为一般经验法则,您只能在从另一个项目查看项目内容时对对象浏览器中可以看到的内容使用反射。也就是说,如果编译项目,创建一个新项目,添加第一个项目作为参考,然后在对象浏览器中查看第一个项目的内容,可以通过访问对象浏览器中可以看到的任何内容。 TypeLib信息对象库。如果对象浏览器中未列出某些内容,则您将无法使用 TypeLib信息对象库来反映它。

VB6没有任何内置的运行时反射或内省支持。使用 TypeLib信息对象库进行反射适用于ActiveX VB6项目,因为ActiveX项目是在具有嵌入式类型库的COM组件中编译的,但如上所述,您只能访问在编译时公开公开的数据类型组件的类型库。使用对象浏览器是确定类型库中的内容的快速方法,因为对象浏览器实际上会检查组件的类型库以填充您在对象浏览器中看到的内容,只要您从查看组件的内容即可。单独的项目(如果您从自己的VB6项目中查看组件,它将显示公共和私有数据结构,即IDE中可见的所有内容)。

答案 1 :(得分:2)

这是你正在寻找的东西:

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

这个帖子在SO:Self Inspection of VB6 UDTs

上进行了讨论

我自己从未尝试过这些东西。