MS IDL的参数为syntax for specifying a defaultvalue
。
我尝试为接受VARIANT_BOOL
的函数指定默认值:
[id(42)] HRESULT Foo([in, defaultvalue(VARIANT_TRUE)] VARIANT_BOOL bar);
并收到以下错误消息:
错误MIDL2035:期望的常量表达式
指定bar
的默认值应为VARIANT_TRUE
的正确语法是什么?
答案 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
。