VB6中VarType返回的vbError是什么?

时间:2013-05-15 17:18:23

标签: error-handling vb6

我一直在网上搜索这个,但一切都在讨论ErrObject类,或vbError函数返回的常量VarType。我想知道实际上 的类型是什么,例如integer类似于4string类似于"hello world"等。

对于一些小背景,here是指向VarType的官方MSDN页面的链接,其中显示了它返回的所有常量及其代表的内容。什么是Error value

2 个答案:

答案 0 :(得分:4)

在VB6和VBA中,通过调用CVErr函数创建错误值。

此函数返回VarType为vbError的Variant,IsError函数返回True

一个典型的用例是返回Variant的Excel UDF:如果返回错误值,它将显示为#VALUE!。

答案 1 :(得分:4)

如果你熟悉C / C ++中的COM,你应该知道从那个角度看VarType()是一个简单的函数,它基本上从vt中提取Variant成员的值作为参数传入。 vt成员的可能值记录在许多地方,例如here

如果检查COM系统头部内部(例如,WTypes.h作为Windows SDK中的一部分分发),您将看到VbError值10确实映射到C / C ++枚举值VT_ERROR

enum VARENUM
    {  VT_EMPTY   = 0,
       ...
       VT_ERROR  = 10,
       ...
    } ;

上面的MSDN链接描述了vt等于VT_ERROR的含义,如下所示:

  

指定了SCODE。错误的类型在 scode 中指定。   通常,对错误值的操作应该引发异常或将错误传播到返回值,视情况而定。

所以,这基本上意味着什么:

Variant显然支持存储多种类型的值,其中包括存储“错误代码”的模糊可能性。更准确地说,这些代码正式称为scode,因为它们可以指示许多类型的“成功”以及“失败”。大多数人将这些代码称为HRESULT s。

这些代码与您在VB6中从Err.Number获得的“错误代码”类型相同。因此,您可以告诉Variant区分“错误代码”和普通数字。

实际上,很少有程序或COM组件(如果有的话)会将错误代码放入Variants中。几乎每个人都只发出COM Exceptions来传达错误(这种机制通过Err对象在VB6中公开)。即使那些在COM异常机制之外返回错误代码的组件也可能在类型变量中这样做(例如Long)。

因此,存在这种可能的返回值的原因是为了完整性。你几乎永远不会在现实生活中看到它。

(编辑:删除有关无法创建“错误”变体的内容。@ Joe在此证明我错了。您可以使用CVErr()创建一个