2011-01-18 27 views
5

के बीच एनम कनवर्ट करना मेरे पास एक मॉड्यूल (ए) में एक enum परिभाषा है, उदा। SUCCESS = 0, INVALID_REQ = 1 आदि। फिर मेरे पास एक और डीएलएल (मॉड्यूल बी) है जिसका अपना स्टेटस एनम सेट है। एक बार जब हम ए में एक नया एनम मान जोड़ते हैं, तो हमें इसे मैन्युअल रूप से बी में जोड़ना होगा क्योंकि ए में .NET और B सी कोड है। इसके अलावा, ए में enum बी में स्थिति enum का हिस्सा है (बी से बी की स्थिति के अलावा अपनी आंतरिक स्थिति है)। यह इन दो मॉड्यूल के बीच एक बहुत तंग युग्मन लगता है। उन्हें कम युग्मित करने के लिए कोई सुझाव? Thx!मॉड्यूल

+0

यहां सबसे बड़ी समस्या दोनों को सिंक में नहीं रख रही है (हालांकि यह एक समस्या है), बल्कि यह तथ्य कि बी में enum का अर्थ ए में enum से अलग है। अब आप चाहने की संभावना खोलते हैं ए के लिए एक नया तत्व जोड़ें, लेकिन अचानक यह बी द्वारा उपयोग किए जाने वाले आंतरिक मूल्य के साथ संघर्ष करता है। यदि आपको अंतःक्रियाशीलता के उद्देश्य के लिए मूल्यों को डुप्लिकेट करने की आवश्यकता है, तो इंटरऑपरेबिलिटी के लिए _only_ का उपयोग करें और अलग-अलग आंतरिक स्थिति का प्रबंधन करें। –

+1

यहां एक * निहित अनुबंध * चल रहा है। कल्पना करें कि HTTP2 एक नया क्रिया कहता है, [जेबबरवॉकी] (http://www.jabberwocky.com/carroll/jabber/jabberwocky.html)। सभी HTTP2 क्लाइंट/सर्वर को इस अनुबंध के ज्ञान के साथ एन्कोड किया जाना होगा। स्पष्ट [प्रोटोकॉल] संस्करणों का उपयोग करना, शायद गार्ड और [नीचे की संगतता] (http://en.wikipedia.org/wiki/Backward_compatibility) के साथ, मिस्चैच को पकड़ने और/या कम करने के लिए उपयोगी हो सकता है। अनुबंध जानकारी साझा करने में सहायता के लिए टूलिंग मौजूद है - कल्पना करें [COM IDLs] (http://en.wikipedia.org/wiki/Component_Object_Model) या अन्य मचान-जेनरेटर। –

+0

@ डैन: मैं ए में एनाम मानों का उपयोग करने के बारे में सोच रहा हूं और 100 से शुरू होने वाले बी में कॉन्स को परिभाषित करता हूं (0-99 से ए)। फिर बी के इंटरफ़ेस के रूप में enum के बजाय पूर्णांक का उपयोग करें। ए और बी दोनों की स्थिति बी के इंटरफ़ेस से उजागर की जा सकती है और चिंता न करें ए और बी एक-दूसरे से हस्तक्षेप करें। – Icerman

उत्तर

2

बिल्डिंग के दौरान फ़ाइल के आधार पर इन एनम्स को उत्पन्न करने वाली एक साधारण स्क्रिप्ट क्यों नहीं लिखती? यदि आप वास्तव में उन्हें बेकार करना चाहते हैं, तो आपको किसी को एक मास्टर बनाने और दूसरी तरफ अपनी सामग्री का पर्दाफाश करने की आवश्यकता होगी .. आरसीडब्लू का उपयोग करने की संभावना ..

+0

* खांसी * COM आईडीएल? * खांसी * –

+0

:) यह लिखने के लिए दुनिया का अंत नहीं है .. :) – gbvb

1

यहां प्रतिबिंब का उपयोग करना मजेदार होगा। मॉड्यूल ए से प्रतिबिंब द्वारा enum को पढ़ता है जो एक छोटा प्रोग्राम लिखें, और सी मॉड्यूल में उपयोग के लिए एक .h फ़ाइल उत्पन्न करता है।

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