在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调用需要做同样的事情,并且编组基本上会做与你期望函数返回相同的事情.
原文链接:https://www.f2er.com/vb/255488.htmlLBound和UBound甚至没有在导出表中显示为函数,所以我的猜测是它们在内部处理更像是“关键字”而不是第一类函数.这是有道理的,因为如果你有一个指向自动化结构的指针,检查一个SAFEARRAY的界限是相当简单的(你只需要在它的末尾索引rgsabound数组并从中读取cElements和lLbound.再次a猜测,但我认为这允许灵活地让LBound和UBound函数同时具有固定长度和可变长度数组.在固定情况下,该数组基本上作为带有索引器的内存块进行管理(更像是VT_CARRAY而不是VT_SAFEARRAY..我想在内部处理这个比提供一流的功能更容易或更方便.