VB6 数组和类型不匹配

VB6 array and Type mismatch

我有一个 VB6 程序,它填充一个二维数组,将该数组传递给 COM DLL 的函数,然后 COM DLL 执行一个 VBScript,将数组分配给 VBScript 中的一个变量。

我同意这听起来令人费解和过时,但我的工作是修复错误而不是重写大量代码。

在 VB6 程序和 VBScript 中,数组变量被命名为 "packageDetails"。在 VBScript 和 VB6 中它声明为:

dim packageDetails

在 VB6 和 VBScript 中,我观察到以下内容:

msgbox isArray(packageDetails) ' True
msgbox ubound(packageDetails, 1) ' 37
msgbox ubound(packageDetails, 2) ' 1

...这符合预期。

我有一个包含 10,000 条记录的 CMS 生成的 TXT 文件。我用 VB6 解析 TXT 文件。对于每条记录,我从 TXT 文件中解析数据,填充数组 "packageDetails",然后将其传递到我的 DLL。 9,999 条记录正常工作,但在其中一条记录中出现以下问题:

在VB6中packageDetails(3, 0)存储字符串"EA",这是期望值。但是在同一个数组上的 VBScript 中,当我执行 msgbox packageDetails(3, 0) 时会抛出一个异常,描述为 "Type mismatch: 'packageDetails'".

Windows Logs/Application 下的事件查看器没有关于此问题的任何消息。

鉴于第一维的最大索引为 37,第二维的最大索引为 1,为什么 (3, 0) 会在 VBScript 中导致类型不匹配,而在 VB6 中不会导致同一数组的类型不匹配?

数组是通过读取 CMS 操作系统生成的文本文件来填充的。我在十六进制编辑器中观察了文本文件,文件中没有不可打印的字符(没有 ASCII NUL 字节等)。

对可能导致问题的原因有任何想法吗?

在 VBScript 中也应使用括号声明数组(如在 VB6 中)

VBScript 数组

https://www.tutorialspoint.com/vbscript/vbscript_arrays.htm

解决了。 在 VB6 中创建的原始数组是 variant 类型。在填充数组后的 VB6 中,我们使用 redim 到 add/remove 行。我们redim的时候,"As String()"也被误用了。在 VB6 中,在 redim 之后,索引符号仍然正确地来自数组的 returns 值。但是,在 VBScript 中,似乎尝试对已使用 "as string" 重新调整的数组使用索引符号会导致 "type mismatch" 错误。当我从 VB6 中的 redim 中删除 "AS String()" 时,VBScript 中不再出现类型不匹配错误。