Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как в VB6 узнать тип объекта, переданного в процедуру по ссылке как Object? / 14 сообщений из 14, страница 1 из 1
07.12.2004, 11:59:26
    #32816156
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в VB6 узнать тип объекта, переданного в процедуру по ссылке как Object?
Код: 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
07.12.2004, 12:25:43
    #32816238
Paksly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в VB6 узнать тип объекта, переданного в процедуру по ссылке как Object?
Код: plaintext
1.
2.
3.
if type of obj is Adodb.command then
 'делай что хочешь
end if
...
Рейтинг: 0 / 0
07.12.2004, 12:32:07
    #32816263
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в VB6 узнать тип объекта, переданного в процедуру по ссылке как Object?
Спасибо, но не работает. 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
07.12.2004, 12:38:54
    #32816280
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в VB6 узнать тип объекта, переданного в процедуру по ссылке как Object?
Замените
MySub (ojbCn)
на
Call MySub(ojbCn)
или
MySub ojbCn
...
Рейтинг: 0 / 0
07.12.2004, 12:39:51
    #32816281
Paksly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в VB6 узнать тип объекта, переданного в процедуру по ссылке как Object?
Попробуй убрать
Код: plaintext
As Object
в параметрах процедуры.
Пускай передается как Variant, может что хорошего выйдет.
...
Рейтинг: 0 / 0
07.12.2004, 12:43:32
    #32816292
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в VB6 узнать тип объекта, переданного в процедуру по ссылке как Object?
WorobjoffЗамените
MySub (ojbCn)
на
Call MySub(ojbCn)
или
MySub ojbCn

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

Спасибо!

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

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

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

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

Может быть наоборот? И потом, какое свойство по умолчанию у модуля?
...
Рейтинг: 0 / 0
07.12.2004, 13:15:43
    #32816390
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в VB6 узнать тип объекта, переданного в процедуру по ссылке как Object?
Расположи на пустой форме 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
07.12.2004, 13:51:02
    #32816490
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в VB6 узнать тип объекта, переданного в процедуру по ссылке как Object?
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
07.12.2004, 13:56:44
    #32816502
Стр
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в VB6 узнать тип объекта, переданного в процедуру по ссылке как Object?
...
Рейтинг: 0 / 0
07.12.2004, 14:15:54
    #32816558
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в VB6 узнать тип объекта, переданного в процедуру по ссылке как Object?
Всё ясно. Спасибо.
...
Рейтинг: 0 / 0
07.12.2004, 18:16:31
    #32817344
Alexey Kudinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в VB6 узнать тип объекта, переданного в процедуру по ссылке как Object?
Замечу еще, что TypeOf, строго говоря, определяет имплементирует ли объект заданный интерфейс (физически вызывает QueryInterface)

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

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


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