MS IDL为参数指定默认值的语法为defaultvalue
。
我尝试为接受VARIANT_BOOL
的函数指定默认值:
[id(42)] HRESULT Foo([in, defaultvalue(VARIANT_TRUE)] VARIANT_BOOL bar);
并且收到了以下错误信息:
错误 MIDL2035:需要常量表达式
如何正确指定bar
的默认值应为VARIANT_TRUE
的语法?
MS IDL为参数指定默认值的语法为defaultvalue
。
我尝试为接受VARIANT_BOOL
的函数指定默认值:
[id(42)] HRESULT Foo([in, defaultvalue(VARIANT_TRUE)] VARIANT_BOOL bar);
并且收到了以下错误信息:
错误 MIDL2035:需要常量表达式
如何正确指定bar
的默认值应为VARIANT_TRUE
的语法?
VARIANT_TRUE 在 WTypes.h 中有定义。你不能直接在 .idl 文件中使用它。通常的方法是直接使用其值,例如在 mshtml.idl 中所做的那样:
[id(42)] HRESULT Foo([in, defaultvalue(-1)] VARIANT_BOOL bar);
如果您喜欢的话,也可以在 .idl 文件中添加 #define,将其放置在靠近顶部的位置:
#define VARIANT_TRUE -1
#define VARIANT_FALSE 0
尽管不能混淆{{link1:bool
、BOOL
和VARIANT_BOOL
}},但在 idl 中,BOOL
被解释为 VARIANT_BOOL
值。
[id(42)] HRESULT Foo([in, defaultvalue(TRUE)] VARIANT_BOOL bar);
当从未指定参数的VBScript中调用时,此代码将作为-1
传递到C++代码。
我不确定哪种方式更符合习惯用法,是TRUE
还是如@Hans所建议的-1
。
TRUE
也适用于VARIANT_BOOL
吗?我很好奇哪种方法是官方的。 - MottiTRUE
的值是错误的,但在IDL中似乎它的值是正确的(请参见我的回答)。关于MSHTML.idl,你从哪里找到它的?我有从DLL生成的.tlh和.tli文件,但没有原始的.idl文件。 - Motti