VB6 Runtime Type Retrieval - PullRequest
       50

VB6 Runtime Type Retrieval

6 голосов
/ 09 сентября 2008

Как вы можете получить тип (имя в виде строки достаточно) объекта в VB6 во время выполнения?

т.е. что-то вроде:

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

/ EDIT: чтобы уточнить, мне нужно проверить динамически типизированные объекты. Пример:

Dim y As Object 

Set y = CreateObject("SomeType")

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

Где вывод будет "CommandButton"

Ответы [ 4 ]

8 голосов
/ 09 сентября 2008

Я думаю, что вы ищете 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

3 голосов
/ 01 октября 2008

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 голосов
/ 09 сентября 2008

У меня нет копии VB6, но я думаю, что вам нужен

Typename()

функция ... Я вижу это в Excel VBA, так что, вероятно, в той же среде выполнения. Интересно, что справка, похоже, предполагает, что она не должна работать для определенного пользователем типа, но это единственный способ, которым я когда-либо делаю использую его.

Выдержка из файла справки:

Функция TypeName

Возвращает строку, содержащую информацию о переменной.

Синтаксис

TypeName (VarName)

Обязательный аргумент varname является Вариант, содержащий любую переменную, кроме переменная определенного пользователем типа.

0 голосов
/ 09 сентября 2008

Это должно оказаться сложным, поскольку в VB6 все объекты являются COM (IDispatch) вещами. Таким образом, они являются только интерфейсом.

TypeOf(object) is class возможно только вызов COM get_interface (я забыл точное имя метода, извините).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...