2008-09-09 27 views
6

¿Cómo se puede obtener el tipo (el nombre como una cadena es suficiente) de un objeto en VB6 en tiempo de ejecución?VB6 Runtime Type Retrieval

decir algo como:

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

/EDIT: para aclarar, tengo que comprobar en los objetos de tipos dinámicos. Un ejemplo:

Dim y As Object 

Set y = CreateObject("SomeType") 

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

Cuando la salida sería "CommandButton"

Respuesta

8

Creo que lo que está buscando es TypeName en lugar de TypeOf.

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

Editar: ¿A qué te refieres Dynamic Objects? ¿Te refieres a los objetos creados con CreateObject (""), porque eso aún debería funcionar.

Editar:

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

salidas

Object Type: FileSystemObject

+0

Tal vez debería aclarar mi pregunta, me gustaría saber qué es un objeto de tipos dinámicos, por lo que usar TypeName se (en mi caso) solo devuelve "Objeto". – DAC

0

Esto debería resultar difícil, ya que en VB6 todos los objetos son COM (IDispatch) cosas. Por lo tanto, son solo una interfaz.

TypeOf(object) is class probablemente solo haga una llamada COM get_interface (Olvidé el nombre exacto del método, lo siento).

2

no tengo una copia de VB6 a mano, pero creo que necesita la función

Typename() 

. Puedo verlo en Excel VBA, por lo que probablemente esté en el mismo tiempo de ejecución. Curiosamente, la ayuda parece sugerir que no debería funcionar para un tipo definido por el usuario, pero esa es la única forma en que lo hago hacer usarlo.

Extracto del archivo de ayuda:

TypeName Función

devuelve una cadena que ofrece información sobre una variable.

Sintaxis

TypeName (varname)

El argumento varname requerida es una variante que contiene cualquier variable excepto una variable de un tipo definido por el usuario.

2

TypeName es lo que quieres ...Aquí hay alguna salida de ejemplo:

Código 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 

Resultados:

String 
Integer 
CommandButton 
Class1 
Boolean