我有一个VB6程序,其中填充了一个二维数组,将该数组传递到COM DLL的一个函数中,然后COM DLL执行VBScript,将该数组分配给VBScript中的变量。
我同意,这听起来很复杂和过时,但我的工作是修复错误,而不是重写大量代码。
在VB6程序和VBScript中,数组变量名为“packageDetails”。在VBScript和VB6中,它被声明为:
在VB6和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生成的包含10,000条记录的TXT文件。我使用VB6解析TXT文件。对于每个记录,我从TXT文件中解析数据,填充数组“packageDetails”,然后将其传递给我的DLL。其中 9,999 条记录没有错误,但在其中一条记录中出现了以下问题:
在VB6中,packageDetails(3,0)
存储字符串“EA”,这是预期值。但是,在VBScript中当我对同一数组执行 msgbox packageDetails(3,0)
时,会抛出异常并显示“Type mismatch: 'packageDetails'”。
Windows日志/应用程序下的事件查看器没有任何关于此问题的消息。
第一维的最大索引为37,第二维的最大索引为1,为什么在VBScript中使用 (3,0) 会导致类型不匹配的问题,而在VB6中却没有?
该数组是通过读取CMS操作系统生成的文本文件进行填充的。我已经在十六进制编辑器中观察到了该文本文件,并且文件中没有不可打印字符(没有ASCII NUL字节等)。
对于可能导致此问题的原因,您有什么想法吗?