VB6数组和类型不匹配

VB6数组和类型不匹配,vb6,type-mismatch,Vb6,Type Mismatch,我有一个VB6程序,它填充二维数组,将该数组传递到COM DLL的函数中,然后COM DLL执行一个VBScript,将数组分配给VBScript中的一个变量 我同意,这听起来既复杂又过时,但我的工作是修复错误,而不是重新编写大量代码 在VB6程序和VBScript中,数组变量名为“packageDetails”。在VBScript和VB6中声明为: dim packageDetails 在VB6和VBScript中,我观察到以下情况: msgbox isArray(packageDetail

我有一个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文件,有10000条记录。我用VB6解析TXT文件。对于每个记录,我解析TXT文件中的数据,填充数组“packageDetails”,然后将其传递给我的DLL。9999条记录可以正常工作,但其中一条记录存在以下问题:

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

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

假设第一个维度的最大索引为37,第二个维度的最大索引为1,为什么(3,0)会导致同一数组的VBScript中的类型不匹配,而不是VB6中的类型不匹配

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


关于什么可能导致此问题,您有什么想法吗?

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

VBScript数组

解决了这个问题。
在VB6中创建的原始数组的类型为variant。在VB6中,填充数组后,我们使用
redim
添加/删除行。当我们
redim
时,也意外地使用了“As String()”。在VB6中,在redim之后,索引表示法仍然正确地从数组返回值。但是,在VBScript中,似乎试图对已使用“as string”重拨的数组使用索引表示法会导致“类型不匹配”错误。当我在VB6中从redim中删除“AS String()”时,VBScript中不再出现类型不匹配错误。

您使用
packageDetails(3,0)
做什么,是否将其分配给某个变量、打印它等?如果显示整个语句或更多代码,将非常有用。最好是在VBScript中发布一个.I'm'm do,
msgbox packageDetails(3,0)
。在VB6中,我只是调试并使用即时窗口和“监视”的组合。还有其他错误信息吗?类似事件查看器>应用程序错误。另外,在vb6和vbscript中,packageDetails的声明是什么。packageDetails是vb6和vbscript中的一个变体。它被称为“暗淡的包装细节”。在Windows Logs>Application下的事件查看器中,我看不到任何内容。请向我们展示如何解析数组内容并将其存储到arrayMethod(链接页面上的arrayMethod#3不使用括号:)以我的方式声明变量并不错误。可以使用
dim x
和以后的
redim x(0,0)
创建数组。事实上,就我而言,这更可取。如果我没有一个或多个记录要存储,我希望变量
为空
(我正在与之通信的API期望这种行为)。做得好,您发现了问题并发布了答案,以便其他人在遇到同样的问题时能够受益。我会冒险猜测它与数组的声明有关,但如果没有代码,这纯粹是猜测。干得好+1仍然无法理解您的陈述:“此代码适用于10000条记录中的9999条”@deblocker I使用导致问题的相同逻辑处理10000条记录,9999没有错误。我认为其中只有一个是使用reDim。当我更正redim语句,删除“as string”部分时,没有错误。