2011-09-25 8 views
5

MS IDL ha syntax for specifying a defaultvalue per i parametri. ho cercato di specificare un valore predefinito per una funzione che accetta un VARIANT_BOOL:Come specificare un valore predefinito per VARIANT_BOOL?

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

ed ho ottenuto il seguente messaggio di errore:

errore MIDL2035: costante espressione previsto

Che cosa è la sintassi corretta per specificare che il valore predefinito di bar deve essere VARIANT_TRUE?

risposta

6

VARIANT_TRUE è # definito in WTypes.h. Non puoi direttamente utilizzarlo nel tuo .idl. L'approccio comune è quello di utilizzare semplicemente il valore direttamente, come si è fatto in mshtml.idl ad esempio:

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

Oppure si può aggiungere un #define al IDL, se si preferisce, metterlo da qualche parte vicino alla parte superiore :

#define VARIANT_TRUE -1 
#define VARIANT_FALSE 0 
+0

Sapevi che l'uso di "TRUE" funziona anche con "VARIANT_BOOL"? Sono curioso di sapere quale sia il modo ufficiale per farlo. – Motti

+1

TRUE ha il valore sbagliato. Dato che mshtml.idl è un file di intestazione Microsoft principale, suppongo che -1 sia il modo * ufficiale *. –

+0

'TRUE' ha il valore errato in C++, in IDL sembra che abbia il valore corretto (vedi la mia risposta). Per quanto riguarda MSHTML.idl, dove l'hai trovato, ho il .tlh e .tli generato dalla DLL ma non un originale .idl – Motti

1

Anche se non si deve mischiare bool, BOOL and VARIANT_BOOL sembra che in IDL BOOL viene interpretato come un valore VARIANT_BOOL.

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

Quando chiamato da VBScript senza parametro specificato questo raggiunge il codice C++ come -1.

Non sono sicuro quale sia il modo più idiomatico TRUE o come @Hans suggerito -1.