在VB6/VBA工程引用中,Array()、LBound()和UBound(



在VB6/VBA项目引用中,Array()、LBound()和UBound(。。?当我输入代码时,它们不会出现在"自动完成"列表(ctrl+空格)中,它们不会自动完成,并且必须在文本编辑器识别它们之前完全键入。只有当键入左括号时,ToolTipText才会弹出命令语法。此外,它们不会出现在对象资源管理器中的任何位置。

这里可能有一个我不知道的基本概念。这让我想知道,还有哪些命令/语句/关键字以同样的方式隐藏。。?某个地方有单子吗。。?我在谷歌上搜索了信息,但没有找到任何东西,可能是因为我不知道自己在寻找什么,并且使用了错误的搜索词。

我问这些问题是因为我有很多VB6内置函数的前缀的习惯,比如:VBA。Left()、VBA。Len、VBA。Instr()等等。但我不知道Array()、LBound()和UBound(。

我之所以使用前缀,是因为几年前我正在做一个大型项目,我试图在不同的参考库中使用相同名称的函数。我是一个新手,花了一段时间才弄清楚,这引起了巨大的问题,因为这些功能并没有按照我想象的方式工作。就在那时,我在弄清楚之后养成了前缀的习惯。这样做更容易,而且总是确保使用预期的功能。

它们没有显示为IntelliSense选项的原因(以及它们没有显示在对象浏览器中的原因)是,由于某些原因,它们没有在VBE7.dll typelib中声明,我无法理解。Array函数在.dll中实现为rtcArray。知道这一点的效用是可疑的,因为它唯一的参数是ParamArray,这意味着如果你直接从VBE7.dll调用它,你需要创建一个数组,让它向你反馈相同的数组。。。这部分解释了为什么它不在typelib上——COM调用需要做同样的事情,封送处理基本上与函数返回的内容相同。

LBoundUBound甚至没有作为函数出现在导出表中,所以我猜测它们在内部处理起来更像是"关键字",而不是第一类函数。这使得有一些的意义,因为如果您有一个指向自动化结构的指针,那么检查SAFEARRAY的边界是非常简单的(您只需在其末尾索引到rgsabound数组并从中读取cElementslLbound。同样是猜测,但我认为这允许LBoundUBound在固定长度和可变长度数组中灵活工作。在固定的情况下,数组基本上被管理为具有索引器的内存块(更像VT_CARRAY而不是VT_SAFEARRAY)。我想,在内部处理这个问题比提供一流的功能更容易或更方便。

won't可以在对象浏览器中找到Debug,也可以在其方法AssertPrint中找到。

您找不到类似方法使用的语句,如OpenCloseGetPut,这就是为什么在使用这些语句时无法获得任何Intellisense,并且必须记住语法。

发现LoadUnloadVBA.Global的成员,但不清楚它们属于什么,它们的自变量是后绑定的Objects。VBA文档指出LoadUnload语句,即使对象浏览器将它们显示为方法

请记住,您可以移动引用的顺序,这样会有所不同。尝试将VBA移动到引用列表的顶部或靠近顶部。我相信,如果其他东西也定义了BASIC关键字,从某种意义上说,它会窃取它。我曾经让Right消失,因为我不知道引用的顺序,所以不得不将Right的所有引用更改为VBA.Right。ubound、lbound或数组可能也是如此。

最新更新