VB6运行时类型检索

时间:2008-09-09 15:29:17

标签: vb6 runtime

如何在运行时获取VB6中Object的Type(作为字符串的名称就足够了)?

即。类似的东西:

If Typeof(foobar) = "CommandButton" Then ...

/ EDIT:澄清一下,我需要检查动态类型对象。一个例子:

Dim y As Object 

Set y = CreateObject("SomeType")

Debug.Print( <The type name of> y)

输出为“CommandButton”

4 个答案:

答案 0 :(得分:8)

我认为你要找的是TypeName而不是TypeOf。

If TypeName(foobar) = "CommandButton" Then
   DoSomething
End If

编辑:你是什么意思动态对象?你的意思是用它创建的对象 CreateObject(“”),因为它仍然可以工作。

编辑:

Private Sub Command1_Click()
    Dim oObject As Object
    Set oObject = CreateObject("Scripting.FileSystemObject")
    Debug.Print "Object Type: " & TypeName(oObject)
End Sub

输出

Object Type: FileSystemObject

答案 1 :(得分:3)

TypeName就是你想要的......这是一些示例输出:

VB6代码:

Private Sub cmdCommand1_Click()
Dim a As Variant
Dim b As Variant
Dim c As Object
Dim d As Object
Dim e As Boolean

a = ""
b = 3
Set c = Me.cmdCommand1
Set d = CreateObject("Project1.Class1")
e = False

Debug.Print TypeName(a)
Debug.Print TypeName(b)
Debug.Print TypeName(c)
Debug.Print TypeName(d)
Debug.Print TypeName(e)
End Sub

结果:

String
Integer
CommandButton
Class1
Boolean

答案 2 :(得分:2)

我手边没有VB6的副本,但我认为你需要

Typename()

function ...我可以在Excel VBA中看到它,所以它可能在同一个运行时。有趣的是,帮助似乎表明它不适用于用户定义的类型,但这是我使用它的唯一方法。

摘自帮助文件:

  

TypeName函数

     

返回一个String,它提供有关变量的信息。

     

语法

     

类型名(VARNAME)

     

必需的varname参数是a   Variant包含除了之外的任何变量   用户定义类型的变量。

答案 3 :(得分:0)

这应该很难,因为在VB6中所有对象都是COM(IDispatch)。因此它们只是一个界面。

TypeOf(object) is class可能只进行了COM get_interface调用(我忘记了确切的方法名称,抱歉)。