2011-09-25 12 views
5

एमएस आईडीएल में पैरामीटर के लिए syntax for specifying a defaultvalue है। मैं एक समारोह है कि एक VARIANT_BOOL स्वीकार करता है के लिए एक डिफ़ॉल्ट मान निर्दिष्ट करने की कोशिश की:VARIANT_BOOL के लिए डिफ़ॉल्ट मान निर्दिष्ट कैसे करें?

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

और निम्न त्रुटि संदेश मिल गया:

त्रुटि MIDL2035: निरंतर अभिव्यक्ति की उम्मीद

क्या है यह निर्दिष्ट करने के लिए सही वाक्यविन्यास है कि bar का डिफ़ॉल्ट मान VARIANT_TRUE होना चाहिए?

उत्तर

6

VARIANT_TRUE # WTypes.h में परिभाषित है। आप सीधे अपने .idl में इसका उपयोग नहीं कर सकते हैं। ,

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

या आप यदि आप चाहें तो अपने .idl करने के लिए एक #define जोड़ सकते हैं इसे कहीं शीर्ष के निकट रख: आम दृष्टिकोण बस, सीधे मान का उपयोग करने की तरह यह उदाहरण के लिए mshtml.idl में किया जाता है है :

#define VARIANT_TRUE -1 
#define VARIANT_FALSE 0 
+0

क्या आप जानते थे कि 'TRUE' का उपयोग करके' VARIANT_BOOL' के लिए भी काम करता है? मैं उत्सुक हूं कि ऐसा करने के लिए _official_ तरीका है। – Motti

+1

TRUE का गलत मूल्य है। यह देखते हुए कि mshtml.idl एक कोर माइक्रोसॉफ्ट हेडर फ़ाइल है, मुझे लगता है कि -1 * आधिकारिक * तरीका है। –

+0

'TRUE' में C++ में गलत मान है, आईडीएल में ऐसा लगता है कि इसका सही मान है (मेरा उत्तर देखें)। MSHTML.idl के संबंध में, आपको यह कहां मिला, मेरे पास डीएलएल से उत्पन्न .tlh और .tli है लेकिन मूल नहीं है। Vid – Motti

1

हालांकि एक bool, BOOL and VARIANT_BOOL अप मिश्रण नहीं करना चाहिए ऐसा लगता है कि आईडीएल BOOL में एक VARIANT_BOOL मूल्य के रूप में व्याख्या की है।

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

जब कोई पैरामीटर के साथ VBScript से कहा जाता है निर्दिष्ट इस -1 के रूप में सी ++ कोड तक पहुँचता है।

मुझे यकीन नहीं है कि कौन सा तरीका अधिक idiomatic TRUE है या @ हंस ने -1 सुझाव दिया है।

संबंधित मुद्दे