VB6: Как передать временную функцию в Visual Basic 6
В C++ возможно передать аргумент временного объекта в функцию:
struct Foo
{
Foo(int arg);
// ...
}
void PrintFoo(const Foo& f);
PrintFoo(Foo(10))
Я пытаюсь реализовать нечто подобное в Visual Basic 6:
'# Scroll bar params
Public Type ScrollParams
sbPos As Long
sbMin As Long
sbMax As Long
End Type
Public Function MakeScrollParams(pos As Long, min As Long, max As Long)
Dim params As ScrollParams
With params
.sbPos = pos
.sbMin = min
.sbMax = max
End With
Set MakeScrollParams = params
End Function
'# Set Scroll bar parameters
Public Sub SetScrollParams(sbType As Long, sbParams As ScrollParams)
Dim hWnd As Long
' ...
End Sub
Тем не мение, Call SetScrollParams(sbHorizontal, MakeScrollParams(3, 0, 10))
выдает ошибку: несоответствие типа аргумента ByRef. Зачем?
2 ответа
Может быть?
Открытая функция MakeScrollParams(как долго, как минимум, как долго, как максимум) как ScrollParams
Пара вещей должна измениться из вашего существующего кода:
Вы должны строго ввести объявление
MakeScrollParams
функция.Возвращает экземпляр
ScrollParams
тип, так что вы должны указать это явно в объявлении. Вот так:Public Function MakeScrollParams(pos As Long, min As Long, max As Long) As ScrollParams
Вы должны удалить
Set
ключевое слово из последней строки в этой функции, чтобы избежать ошибки компиляции "Требуется объект". Вы можете использовать толькоSet
с объектами, такими как экземпляры классов. Для обычных типов значений вы вообще опускаете это:MakeScrollParams = params
Таким образом, полное объявление функции будет выглядеть так:
Public Function MakeScrollParams(pos As Long, min As Long, max As Long) As ScrollParams
Dim params As ScrollParams
With params
.sbPos = pos
.sbMin = min
.sbMax = max
End With
MakeScrollParams = params
End Function
И называя это так:
Call SetScrollParams(sbHorizontal, MakeScrollParams(3, 0, 10))
сейчас работает отлично.