2011-09-25 15 views
5

MS IDL có syntax for specifying a defaultvalue cho các thông số. tôi đã cố gắng để xác định một giá trị mặc định cho một chức năng chấp nhận một VARIANT_BOOL:Cách chỉ định giá trị mặc định cho VARIANT_BOOL?

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

Và nhận được thông báo lỗi sau:

lỗi MIDL2035: biểu thức hằng mong đợi

là gì cú pháp chính xác để xác định rằng giá trị mặc định của bar phải là VARIANT_TRUE?

Trả lời

6

VARIANT_TRUE đượC#defined trong WTypes.h. Bạn không thể trực tiếp sử dụng nó trong .idl của bạn. Cách tiếp cận phổ biến là chỉ cần sử dụng các giá trị trực tiếp, giống như nó được thực hiện trong mshtml.idl ví dụ:

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

Hoặc bạn có thể thêm một #define để .idl của bạn nếu bạn thích, đặt nó ở đâu đó gần đầu trang :

#define VARIANT_TRUE -1 
#define VARIANT_FALSE 0 
+0

Bạn có biết rằng việc sử dụng 'TRUE' cũng hoạt động cho' VARIANT_BOOL'? Tôi tò mò như là cách _official_ để làm điều này. – Motti

+1

TRUE có giá trị sai. Cho rằng mshtml.idl là một tệp tiêu đề cốt lõi của Microsoft, tôi cho rằng -1 là cách * chính thức *. –

+0

'TRUE' có giá trị sai trong C++, trong IDL có vẻ như nó có giá trị đúng (xem câu trả lời của tôi). Về MSHTML.idl, bạn tìm thấy nó ở đâu, tôi có tệp .tlh và .tli được tạo từ tệp DLL nhưng không phải là bản gốc .idl – Motti

1

Mặc dù ta không nên trộn lẫn bool, BOOL and VARIANT_BOOL nó xuất hiện rằng trong IDL BOOL được hiểu như là một giá trị VARIANT_BOOL.

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

Khi được gọi từ VBScript không có tham số nào được chỉ định, mã C++ là -1.

Tôi không chắc chắn cách nào là thành ngữ hơn TRUE hoặc như @Hans đề xuất -1.