我有一个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字节等)。
关于可能导致问题的任何想法?
答案 0 :(得分:0)
解决了它。
在VB6中创建的原始数组是变体类型。在填充数组后的VB6中,我们使用redim
来添加/删除行。当我们redim
时," As String()"也被意外使用了。在VB6中,在redim之后,索引表示法仍然正确地返回数组中的值。但是,在VBScript中,似乎尝试对使用"作为字符串"重新编目的数组使用索引表示法。导致"类型不匹配"错误。当我删除" AS String()"从VB6中的redim开始,VBScript中不再出现类型不匹配错误。
答案 1 :(得分:-1)
数组应该使用括号声明,也可以在VBScript中声明(如在VB6中)
VBScript数组