如何用UBound <LBound制作VB6变体数组?

  发布于 2023-02-11 10:34

我试图摆脱对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的数组!不幸的是,这是一个String数组,而我需要一个Variant数组。我不能很好地将字符串从一个数组单独复制到另一个数组的Variants中,因为0到-1以及所有。

有谁知道如何在不使用SCRRUN.DLL的情况下使用LBound 0和UBound -1制作这样的数组Variant()?最好也只使用内置的VB6东西,但是如果允许使用某些外部东西(SCRRUN.DLL除外),那么如果您可以这样做,我会很高兴。谢谢。

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有