在VB6中处理变体类型的正确方法是什么?

在VB6中处理变体类型的正确方法是什么?,vb6,vb6-migration,Vb6,Vb6 Migration,我有一个DLL(目前无法访问),其中一个函数返回一个Variant() 从理论上讲,这种变体应该返回一系列错误(如果发生这种情况) 暗淡的结果 iresult=object.functioncall() 我试图捕捉这个结果集,不管它是否为空。我现在得到的是: ?类型名称(iresult) 变量() ?uBond(iresult) 1 ?lBond(iresult) 0 ?isempty(iresult) 假 ?isnull(iresult) 假 ?iArray(iresult) 正确 任何试图进

我有一个DLL(目前无法访问),其中一个函数返回一个Variant()

从理论上讲,这种变体应该返回一系列错误(如果发生这种情况)

暗淡的结果

iresult=object.functioncall()

我试图捕捉这个结果集,不管它是否为空。我现在得到的是:

?类型名称(iresult)
变量()
?uBond(iresult)
1
?lBond(iresult)
0
?isempty(iresult) 假
?isnull(iresult)

?iArray(iresult)
正确

任何试图进入iresult(1)或iresult(0)内部或通过循环的尝试都会导致下标超出范围错误。我可以接受数组为空,但如果它包含某些内容,我需要得到它


欢迎提出任何建议。谢谢。

在访问代码后,我意识到部分问题是返回的数组是二维的。但我还是作弊了,因为数组可能是空的,Variant无法识别它是空的或null

通过重复返回的变量(它总是以数组或排序的形式返回),我捕获了“超出范围”错误,并用我的代码执行其中一个错误。如果它再次出现,我也会很好


谢谢您的帮助。

请澄清,调用的程序也是VB6?是的,也是VB6,一个可执行文件。您可以尝试Dim iresult()作为变体吗?也许它变得混乱了。我已经试过了,但发现?ubound(iresult)作为下标超出了范围。我查看了dll中的代码,似乎它试图返回的数组实际上是typename empty。也许这与此有关。很奇怪。对不起,我没有主意了。空、空等都是特殊值,所以如果您不使用它们,那么当然检查这些值将不起作用。相反,您似乎返回了一个无量纲数组,这更难直接检测。有几种可能的“治疗方法”,但用一句话来解释它们并不容易。异常处理工作正常,但这里没有任何神秘的事情发生。您没有Variant函数,而是Variant数组函数。用尤达大师的话说:“这就是你失败的原因。”这是有道理的。这已经超出了我对VB6阵列的了解。