如何为VARIANT_BOOL指定默认值?

时间:2011-09-25 10:03:51

标签: com default-value idl

MS IDL的参数为syntax for specifying a defaultvalue。 我尝试为接受VARIANT_BOOL的函数指定默认值:

[id(42)] HRESULT Foo([in, defaultvalue(VARIANT_TRUE)] VARIANT_BOOL bar);

并收到以下错误消息:

  

错误MIDL2035:期望的常量表达式

指定bar的默认值应为VARIANT_TRUE的正确语法是什么?

2 个答案:

答案 0 :(得分:6)

VARINT_TRUE在WTypes.h中是#defined。您无法在.idl中直接使用它。常见的方法是直接使用该值,就像在mshtml.idl中一样,例如:

  [id(42)] HRESULT Foo([in, defaultvalue(-1)] VARIANT_BOOL bar);

或者,如果您愿意,可以在.idl中添加#define,将其放在靠近顶部的位置:

#define VARIANT_TRUE -1
#define VARIANT_FALSE 0

答案 1 :(得分:1)

虽然不应该混淆bool, BOOL and VARIANT_BOOL,但似乎在idl BOOL中将其解释为VARIANT_BOOL值。

[id(42)] HRESULT Foo([in, defaultvalue(TRUE)] VARIANT_BOOL bar);

当从VBScript调用但没有指定参数时,这将以-1的形式到达C ++代码。

我不确定哪种方式更具惯用性TRUE或@Hans建议-1