【问题标题】:How do I make a VB6 variant array with UBound < LBound?如何使用 UBound < LBound 创建 VB6 变体数组?
【发布时间】:2013-12-12 21:51:40
【问题描述】:

我正在尝试在 VB6 应用程序中摆脱对 SCRRUN.DLL 的依赖。它目前使用的其中一件事是它的 Dictionary 类。 Dictionary 类有一个 Keys 函数,它应该返回字典中的键数组。我做了一些实验,看看如果字典中没有键会发生什么:

Dim D As Dictionary
Set D = New Dictionary
Dim K() As Variant
K = D.Keys
MsgBox LBound(K) & ", " & UBound(K)

我期待“下标超出范围”或类似的东西,但我被告知 LBound 是 0 而 UBound 是 -1。

那么,如何创建一个 LBound 0 和 UBound -1 的 Variant 数组?

我试过只使用未初始化的变量数组:

Dim K() as Variant
MsgBox LBound(K) & ", " & UBound(K)

但正如我所料,这当然会引发“下标超出范围”。擦除未初始化的数组也是如此:

Dim K() as Variant
Erase K
MsgBox LBound(K) & ", " & UBound(K)

与擦除已初始化的数组一样:

Dim K() As Variant
ReDim K(0 To 0)
Erase K
MsgBox LBound(K) & ", " & UBound(K)

我还尝试将亮度调整为 0 和 -1,这可能看起来很奇怪:

Dim K() As Variant
ReDim K(0 To -1)
MsgBox LBound(K) & ", " & UBound(K)

但这也会导致“下标超出范围”。

在网上翻了一下,我发现了以下技巧:

Dim K() As String
K = Split(vbNullString)
MsgBox LBound(K) & ", " & UBound(K)

这实际上给出了一个 LBound 0 和 UBound -1 的数组!不幸的是,它是一个字符串数组,而我需要一个变体数组。我不能很好地单独将字符串从一个数组复制到另一个数组中的 Variants,因为,嗯,0 到 -1 等等。

有谁知道如何在不使用 SCRRUN.DLL 的情况下制作这样一个数组,即 LBound 0 和 UBound -1 的 Variant()?最好也只使用内置的 VB6 东西,但如果你可以使用一些外部的东西(除了 SCRRUN.DLL),我会全力以赴。谢谢。

【问题讨论】:

  • 正如您在实验中所注意到的,您有时会遇到一个单元化数组,这会给您“下标超出范围”错误——这与一个已初始化但为空的数组不同。您可能还会发现此答案很有帮助:stackoverflow.com/a/444810/137646
  • +1 表示您的问题中显示了良好的研究

标签: arrays vb6 variant


【解决方案1】:

你可以使用Array函数:

Dim K()
K = Array()
MsgBox UBound(K)

【讨论】:

    【解决方案2】:

    好的,回答我自己的问题(但使用 OLEAUT32.DLL;我仍然对任何纯内置 VB6 的解决方案感兴趣):

    Private Declare Function SafeArrayCreateVector Lib "OLEAUT32.DLL" ( _
        ByVal vt As VbVarType, ByVal lLbound As Long, ByVal cElements As Long) _
        As Variant()
    
    Private Const VT_VARIANT As Long = 12
    

    (...)

    Dim K() As Variant
    K = SafeArrayCreateVector(VT_VARIANT, 0, 0)
    MsgBox LBound(K) & ", " & UBound(K)
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多