在VB6 / VBA项目引用中,Array(),LBound()和UBound()来自……?

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

这里可能有一个基本概念,我不知道.它让我想知道,其他命令/声明/关键字以同样的方式被隐藏了吗?某个地方有名单吗?我用谷歌搜索信息,但没有找到任何东西,可能是因为我不知道我在寻找什么,并使用错误搜索条件.

我问这些问题是因为我习惯为许多VB6内置函数加上前缀:VBA.Left(),VBA.Len,VBA.Instr()等等.但我无法弄清楚与Array(),LBound()和UBound()一起使用的参考前缀,或者它们对VB6来说是如此基本,以至于它们没有.

我做这个前缀是因为多年前我正在研究一个大型项目,并且我尝试在不同的参考库中使用相同名称函数.我是一个新手,我花了一段时间才弄明白,它造成了巨大的问题,因为这些功能并没有像我认为的那样工作.就在那之后,我发现了这个前缀习惯.这种方式更简单,并始终确保使用预期的功能.

它们不作为IntelliSense选项出现的原因(以及它们没有出现在对象浏览器中的原因)是因为某种原因它们不在我之外的VBE7.dll类型库中声明它们. Array函数在.dll中实现为rtcArray.知道它的实用性是可疑的,因为它的唯一参数是ParamArray,这意味着如果你直接从VBE7.dll调用它,你需要创建一个数组让它为你提供同样的数组…这部分解释为什么它不在类型库上 – 一个COM调用要做同样的事情,并且编组基本上会做与你期望函数返回相同的事情.

LBound和UBound甚至没有在导出表中显示函数,所以我的猜测是它们在内部处理更像是“关键字”而不是第一类函数.这是有道理的,因为如果你有一个指向自动化结构的指针,检查一个SAFEARRAY的界限是相当简单的(你只需要在它的末尾索引rgsabound数组并从中读取cElements和lLbound.再次a猜测,但我认为这允许灵活地让LBound和UBound函数同时具有固定长度和可变长度数组.在固定情况下,该数组基本上作为带有索引器的内存块进行管理(更像是VT_CARRAY而不是VT_SAFEARRAY..我想在内部处理这个比提供一流的功能更容易或更方便.

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...