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,10))
会引发错误:ByRef参数类型不匹配。为什么?     

解决方法

也许? 公共函数MakeScrollParams(pos为long,最小为long,最大为long)作为ScrollParams     ,需要更改现有代码中的几件事: 您需要强键入
MakeScrollParams
函数的声明。 它返回“ 4”类型的实例,因此您应该在声明中显式指定该实例。像这样:
Public Function MakeScrollParams(pos As Long,min As Long,max As Long) As ScrollParams
您需要从该函数的最后一行删除
Set
关键字,以避免出现\“ Object Required \”编译错误。您只能对对象(例如类的实例)使用“ 6”。对于常规值类型,请完全省略:
MakeScrollParams = params
因此完整的函数声明如下所示:
Public Function MakeScrollParams(pos 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,10))
现在工作正常。