VB6: Как передать временную функцию в Visual Basic 6 - PullRequest
1 голос
/ 25 мая 2011

В 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 ]

3 голосов
/ 25 мая 2011

Необходимо изменить пару вещей по сравнению с существующим кодом:

  1. Вам необходимо строго ввести объявление функции MakeScrollParams.

    Возвращаетэкземпляр типа ScrollParams, поэтому вы должны явно указать это в объявлении.Например:

    Public Function MakeScrollParams(pos As Long, min As Long, max As Long) As ScrollParams
    
  2. Необходимо удалить ключевое слово Set из последней строки в этой функции, чтобы избежать ошибки компиляции «Требуется объект».Вы можете использовать Set только с объектами, такими как экземпляры классов.Для обычных типов значений вы вообще его опускаете:

    MakeScrollParams = params
    


Таким образом, полное объявление функции будет выглядеть так:вот так:

Call SetScrollParams(sbHorizontal, MakeScrollParams(3, 0, 10))

теперь отлично работает.

2 голосов
/ 25 мая 2011

Может быть?

Публичная функция MakeScrollParams (как долго, как минимум, как долго, как максимум) как ScrollParams

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