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