Страница: 1 |
Страница: 1 |
Вопрос: Существует ли в Vb6 возможность...
Добавлено: 01.03.07 13:14
Автор вопроса: Tur | ICQ: 201446364
Существует ли в Vb6 возможность создать такую функцию которая бы могла получать массив любого типа и определять тип массива?
Что то вроде этого:
Function myfunc(arr() as Variant)
... ' arr -> Double
... ' arr -> Byte
.................
end Function
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #1
Добавлено: 01.03.07 13:28
Option Explicit
Private Sub Form_Load()
Dim Array1() As Byte
Dim Array2() As Integer
Dim Array3() As String
Dim Array4() As Object
myfunc Array1
myfunc Array2
myfunc Array3
myfunc Array4
End Sub
Private Function myfunc(arr As Variant)
MsgBox TypeName(arr)
End Function
Это самый ламерский способ.
Вообще смотря что тебе нужно. Можешь просто проверять поле vt структуры VARIANT.
Номер ответа: 2
Автор ответа:
Tur
ICQ: 201446364
Вопросов: 22
Ответов: 72
Профиль | | #2
Добавлено: 02.03.07 14:04
LamerOnLine, спасибо!
У меня есть DLL с кучей функций, который я подключаю к своим прогам. Там есть и такие простые функции:
Sub savear(inar() As Double, outar() As Double)
On Error GoTo calcErr
Dim i As Long: ReDim outar(LBound(inar) To UBound(inar))
For i = LBound(inar) To UBound(inar): outar(i) = inar(i): Next: Exit Sub
calcErr: ReDim outar(1 To 1): outar(1) = -777
End Sub
Чтобы не писать подобные функции для других типов массивов мне и понадобилось определять тип массива
Это что то вроде переменного числа аргументов функции. Теперь еще добавилать переменность типа массива.
А как и зачем определять поле vt структуры VARIANT?
Номер ответа: 3
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #3
Добавлено: 02.03.07 14:12
Да, к сожалению VB6 не поддерживает шаблоны функций, посему порой приходится извращаться.
ЗЫ Поле vt отвечает за тип переменной VARIANT. Можешь узнать является ли она массивом, и если да - то какого типа. Полезно на С++, в VB это можно сделать тупее и проще.
Номер ответа: 4
Автор ответа:
Tur
ICQ: 201446364
Вопросов: 22
Ответов: 72
Профиль | | #4
Добавлено: 02.03.07 14:37
Вся моя проблема была в декларации:
Private Function myfunc(arr As Variant)
Раньше я писал так:
Private Function myfunc(arr() As Variant)
И получал бред
LamerOnLine, спасибо!