VB6数组和类型不匹配

时间:2017-07-26 14:27:47

标签: vb6 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

......这是预期的。

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

在VB6 packageDetails(3, 0)中存储字符串“EA”,这是预期值。但是在我执行msgbox packageDetails(3, 0)的同一个数组的VBScript中,引发了一个异常,其中包含“类型不匹配:'packageDetails'”。

Windows日志/应用程序下的事件查看器没有此问题的任何消息。

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

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

关于可能导致问题的任何想法?

2 个答案:

答案 0 :(得分:0)

解决了它。 在VB6中创建的原始数组是变体类型。在填充数组后的VB6中,我们使用redim来添加/删除行。当我们redim时," As String()"也被意外使用了。在VB6中,在redim之后,索引表示法仍然正确地返回数组中的值。但是,在VBScript中,似乎尝试对使用"作为字符串"重新编目的数组使用索引表示法。导致"类型不匹配"错误。当我删除" AS String()"从VB6中的redim开始,VBScript中不再出现类型不匹配错误。

答案 1 :(得分:-1)

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

VBScript数组

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