Récupération du type d'exécution VB6
Question
Comment obtenir le type (le nom sous forme de chaîne suffit) d'un objet en VB6 au moment de l'exécution ?
c'est à dire.quelque chose comme:
If Typeof(foobar) = "CommandButton" Then ...
/MODIFIER: pour clarifier, je dois vérifier les objets typés dynamiquement.Un exemple:
Dim y As Object
Set y = CreateObject("SomeType")
Debug.Print( <The type name of> y)
Où la sortie serait "CommandButton"
La solution
Je pense que ce que vous recherchez est TypeName plutôt que TypeOf.
If TypeName(foobar) = "CommandButton" Then
DoSomething
End If
Modifier:Que voulez-vous dire par objets dynamiques ?Voulez-vous dire des objets créés avec CreateObject (""), car cela devrait encore fonctionner.
Modifier:
Private Sub Command1_Click()
Dim oObject As Object
Set oObject = CreateObject("Scripting.FileSystemObject")
Debug.Print "Object Type: " & TypeName(oObject)
End Sub
Les sorties
Object Type: FileSystemObject
Autres conseils
TypeName est ce que vous voulez...Voici un exemple de sortie :
Code 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
Résultats:
String
Integer
CommandButton
Class1
Boolean
Je n'ai pas de copie de VB6 sous la main, mais je pense que vous avez besoin du
Typename()
fonction...Je peux le voir dans Excel VBA, donc c'est probablement dans le même runtime.Fait intéressant, l'aide semble suggérer que cela ne devrait pas fonctionner pour un type défini par l'utilisateur, mais c'est à peu près la seule façon pour moi de le faire. faire utilise le.
Extrait du fichier d'aide :
Fonction TypeName
Renvoie une chaîne qui fournit des informations sur une variable.
Syntaxe
TypeName(varname)
L'argument Varname requis est une variante contenant n'importe quelle variable sauf une variable d'un type défini par l'utilisateur.
Cela devrait s'avérer difficile, puisque dans VB6 tous les objets sont COM (IDispatch
) des choses.Ils ne sont donc qu'une interface.
TypeOf(object) is class
ne fait probablement qu'un appel COM get_interface (j'ai oublié le nom exact de la méthode, désolé).