powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как в VB6 узнать тип объекта, переданного в процедуру по ссылке как Object?
14 сообщений из 14, страница 1 из 1
Как в VB6 узнать тип объекта, переданного в процедуру по ссылке как Object?
    #32816156
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Option Explicit

Private Sub Main()
    Dim objCn As New ADODB.Command
    MySub (objCn)
End Sub

Public Sub MySub(ByRef obj As Object)
    ' Как тут узнать, что за тип имеет obj?
End Sub

Вариант типа вызвать метод и перехватить ошибку не предлагать, так как методы объектов разных типов могут иметь одну и ту же сигнатуру и, в общем случае, может не быть уникального метода.

Спасибо
...
Рейтинг: 0 / 0
Как в VB6 узнать тип объекта, переданного в процедуру по ссылке как Object?
    #32816238
Paksly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
if type of obj is Adodb.command then
 'делай что хочешь
end if
...
Рейтинг: 0 / 0
Как в VB6 узнать тип объекта, переданного в процедуру по ссылке как Object?
    #32816263
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, но не работает. TypeOf я так пробовал применить:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Option Explicit

Private Sub Main()
    Dim objCn As New ADODB.Command
    MySub (objCn)
End Sub

Public Sub MySub(ByRef obj As Object)
    If TypeOf obj Is ADODB.Command Then
        MsgBox ("ADODB.Command")
    Else
        MsgBox ("Unknown object type")
    End If
End Sub

Всплывает окно "Unknown object type"...
...
Рейтинг: 0 / 0
Как в VB6 узнать тип объекта, переданного в процедуру по ссылке как Object?
    #32816280
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Замените
MySub (ojbCn)
на
Call MySub(ojbCn)
или
MySub ojbCn
...
Рейтинг: 0 / 0
Как в VB6 узнать тип объекта, переданного в процедуру по ссылке как Object?
    #32816281
Paksly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй убрать
Код: plaintext
As Object
в параметрах процедуры.
Пускай передается как Variant, может что хорошего выйдет.
...
Рейтинг: 0 / 0
Как в VB6 узнать тип объекта, переданного в процедуру по ссылке как Object?
    #32816292
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WorobjoffЗамените
MySub (ojbCn)
на
Call MySub(ojbCn)
или
MySub ojbCn

Помогло. Правда, я пока не нахожу объяснения такому поведению.

Спасибо!

PakslyПопробуй убрать
Код: plaintext
As Object
в параметрах процедуры.
Пускай передается как Variant, может что хорошего выйдет.

Это условие задачи, изменить невозможно.
...
Рейтинг: 0 / 0
Как в VB6 узнать тип объекта, переданного в процедуру по ссылке как Object?
    #32816329
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MySub (ojbCn)
соответствует вызову
Call MySub ((ojbCn))
а это уже не ссылка - а свойство по умолчанию.
...
Рейтинг: 0 / 0
Как в VB6 узнать тип объекта, переданного в процедуру по ссылке как Object?
    #32816339
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В документации нашёл такое:

авторIf you omit the Call keyword, you also must omit the parentheses around argumentlist.

Но почему же компилятор не ловит случай, когда Call отсутсвует, а скобки есть?
...
Рейтинг: 0 / 0
Как в VB6 узнать тип объекта, переданного в процедуру по ссылке как Object?
    #32816342
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WorobjoffMySub (ojbCn)
соответствует вызову
Call MySub ((ojbCn))
а это уже не ссылка - а свойство по умолчанию.

Может быть наоборот? И потом, какое свойство по умолчанию у модуля?
...
Рейтинг: 0 / 0
Как в VB6 узнать тип объекта, переданного в процедуру по ссылке как Object?
    #32816390
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Расположи на пустой форме TextBox и кнопку
И посмотри что будет
Код: plaintext
1.
2.
3.
4.
5.
6.
Private Sub Text1_Click()
   MsgBox (Text1)
End Sub

Private Sub Command1_Click()
   MsgBox (Command1)
End Sub
...
Рейтинг: 0 / 0
Как в VB6 узнать тип объекта, переданного в процедуру по ссылке как Object?
    #32816490
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WorobjoffРасположи на пустой форме TextBox и кнопку
И посмотри что будет
Код: plaintext
1.
2.
3.
4.
5.
6.
Private Sub Text1_Click()
   MsgBox (Text1)
End Sub

Private Sub Command1_Click()
   MsgBox (Command1)
End Sub


Это к тому, что в конструкции MsgBox (Text1) передаётся не ссылка на объект, а значение по умолчанию экземпляра, как я понял. Но тем не менее, как объяснить, что делает MySub(obj)?
...
Рейтинг: 0 / 0
Как в VB6 узнать тип объекта, переданного в процедуру по ссылке как Object?
    #32816502
Стр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Как в VB6 узнать тип объекта, переданного в процедуру по ссылке как Object?
    #32816558
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё ясно. Спасибо.
...
Рейтинг: 0 / 0
Как в VB6 узнать тип объекта, переданного в процедуру по ссылке как Object?
    #32817344
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Замечу еще, что TypeOf, строго говоря, определяет имплементирует ли объект заданный интерфейс (физически вызывает QueryInterface)

Есть еще TypeName, его можно использовать чтобы определить Default Interface, т.е. имя класса.

Хотя практически, конечно, имеет смысл использовать TypeOf
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как в VB6 узнать тип объекта, переданного в процедуру по ссылке как Object?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]