2011-09-25 12 views
5

MS IDL tiene syntax for specifying a defaultvalue para los parámetros. Me trataron de especificar un valor predeterminado para una función que acepta un VARIANT_BOOL:¿Cómo se especifica un valor predeterminado para VARIANT_BOOL?

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

y obtuvo el siguiente mensaje de error:

error MIDL2035: expresión constante espera

¿Cuál es la sintaxis correcta para especificar que el valor predeterminado de bar debería ser VARIANT_TRUE?

Respuesta

6

VARIANT_TRUE está #defined en WTypes.h. No puedes usarlo directamente en tu .idl. El enfoque común es usar simplemente el valor directamente, como se hace en mshtml.idl por ejemplo:

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

O puede agregar un # define a su .idl, si lo prefiere, ponerlo en algún lugar cerca de la cima :

#define VARIANT_TRUE -1 
#define VARIANT_FALSE 0 
+0

¿Sabías que usar 'TRUE' también funciona para' VARIANT_BOOL'? Tengo curiosidad sobre cuál es la manera _official_ de hacer esto. – Motti

+1

TRUE tiene el valor incorrecto. Dado que mshtml.idl es un archivo principal de Microsoft, supongo que -1 es la forma * oficial *. –

+0

'TRUE' tiene el valor incorrecto en C++, en IDL parece que tiene el valor correcto (ver mi respuesta). Con respecto a MSHTML.idl, donde lo encontraste, tengo el .tlh y el .tli generados a partir de la DLL pero no un .idl original – Motti

1

Aunque no hay que mezclar bool, BOOL and VARIANT_BOOL parece que en IDL BOOL se interpreta como un valor VARIANT_BOOL.

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

cuando se llama desde VBScript con ningún parámetro especificado esta alcanza el código C++ como -1.

No estoy seguro de qué manera es más idiomático TRUE o como @Hans sugirió -1.

Cuestiones relacionadas