2013-03-12 4 views
6

दो परियोजनाएं हैं, एक सी ++ सीएलआई और अन्य सी # है।
सी # परियोजना में सी ++ सीएलआई परियोजना का संदर्भ है।सी #+ सीएलआई में समतुल्य सी # गतिशील कीवर्ड क्या है?

सी # में मैं ऐसा करना चाहते हैं:

//method signature is somemethod(dynamic data); 
somemethod("haaaii"); 

अब विधि है जो सी ++ CLI परियोजना में है इस संभाल चाहिए।

सी ++ सीएलआई में इस विधि को कैसे घोषित करें?
सी ++ सीएलआई में डेटा प्रकार का पता लगाने के लिए कैसे?

+0

सी ++ और सी # के कौन से संस्करण आप बिल्कुल उपयोग कर रहे हैं? –

+0

@ रैमहाउंड सी ++ सीएलआई जिसे 'विजुअल स्टूडियो 2012' और सी # के साथ भेज दिया गया है जिसे 'विजुअल स्टूडियो 2010' –

+0

के साथ भेज दिया गया है, इसलिए आप मूल रूप से एक .NET Framework 4.0 असेंबली में .NET Framework 4.0 असेंबली को संदर्भित करने का प्रयास कर रहे हैं जो एक समस्या साबित करता है। क्या आप कम से कम .NET Framework के समान संस्करण को लक्षित करते हैं? –

उत्तर

6

साथ गतिशील प्राप्त करने के लिए एक विधि हस्ताक्षर जो सी # dynamic रूप में देखता है प्राप्त करने के लिए हो सकता है:

void TestMethod([System::Runtime::CompilerServices::DynamicAttribute] System::Object^ arg) 
{ 
} 

लेकिन तुम सिर्फ सभी प्रकार स्वीकार करना चाहते हैं, आप बस System::Object^ का उपयोग कर सकते हैं। विशेषता भ्रामक है, क्योंकि यह अर्थशास्त्र का तात्पर्य है जो आपको एक कठिन समय प्रदान करेगा।

वास्तविक डेटा प्रकार खोजने के लिए, arg->GetType() का उपयोग करें। फिर आप रनटाइम पर सदस्यों की खोज और आविष्कार के लिए प्रतिबिंब और/या डीएलआर की सभी शक्तियों का उपयोग कर सकते हैं।

रिटर्न प्रकार पर विशेषता का उपयोग करने के लिए थोड़ा अधिक उपयोगी है, तब से C#अर्थशास्त्र का अनुमान लगाएगा जब var कीवर्ड का उपयोग किया जाता है।

[returnvalue: System::Runtime::CompilerServices::DynamicAttribute] 
System::Object^ TestReturn(void) 
{ 
    return 1; 
} 
+0

यह बहुत सराहना करता है; आपने मेरा बहुत समय बचा लिया है; बहुत बहुत धन्यवाद। –

0

आप System::Dynamic::DynamicObject प्रकार

void somemethod(ref System::Dynamic::DynamicObject data) { }

+0

मैंने इसे सफलता के साथ आजमाया है। लगता है कि 'डायनामिक ऑब्जेक्ट' की आवश्यकता 'लिंक' –

+2

के संदर्भ की आवश्यकता है अधिक संभावना 'सिस्टम :: गतिशील :: गतिशील ऑब्जेक्ट ^'। नहीं, इसे LINQ की आवश्यकता नहीं है। लेकिन आपको System.Core.DLL असेंबली में निहित डीएलआर का संदर्भ देना होगा। –

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