2010-02-10 14 views
63

marshalling क्या है और हमें इसकी आवश्यकता क्यों है?मार्शलिंग - यह क्या है और हमें इसकी आवश्यकता क्यों है?

मुझे यह विश्वास करना मुश्किल लगता है कि मैं सी # से सी के तार पर int नहीं भेज सकता और उसे मार्शल करना होगा। सी # केवल शुरुआती और समापन सिग्नल के साथ 32 बिट्स क्यों नहीं भेज सकता है, सी कोड बता रहा है कि इसे int प्राप्त हुआ है?

यदि कोई अच्छा ट्यूटोरियल या साइटें हैं, तो हमें मार्शेलिंग और इसका उपयोग करने की आवश्यकता क्यों है, यह बहुत अच्छा होगा।

+2

वास्तव में, आप ** केवल शुरुआती और समाप्ति संकेत के साथ 32 बिट्स भेज सकते हैं। वह एक int के लिए अपने खुद के marshalling लिख रहा होगा। लेकिन आप एक शब्दकोश <कस्टम क्लासए, सूची <कस्टम क्लासबी >> सी कोड में कैसे पास करेंगे? –

+2

जब आप "तार पर" कहते हैं तो अंतहीनता दिमाग में आती है। – user7116

+0

सच बड़े/छोटे एंडियन या किसी अन्य भिन्नता की उपेक्षा करते हैं। –

उत्तर

54

क्योंकि अलग-अलग भाषाओं और वातावरण अलग बुला सम्मेलनों, विभिन्न लेआउट सम्मेलनों, पुरातन (सी # में सीएफ char और सी में char) के विभिन्न आकारों, अलग ऑब्जेक्ट निर्माण/विनाश सम्मेलनों, और विभिन्न डिजाइन दिशानिर्देश हैं। आपको प्रबंधित भूमि से सामान को कहीं से बाहर लाने का एक तरीका चाहिए जहां अप्रबंधित भूमि इसे देख और समझ सके और इसके विपरीत। यही मार्शलिंग के लिए है।

8

int मार्शलिंग आदर्श रूप से आपने जो कहा है: सीएलआर के प्रबंधित स्टैक से स्मृति को किसी जगह पर कॉपी करना जहां सी कोड इसे देख सकता है। मार्शलिंग तार, वस्तुएं, सरणी, और अन्य प्रकार कठिन चीजें हैं।

लेकिन पी/Invoc इंटरऑप परत आपके लिए इन सभी चीजों का ख्याल रखता है।

3

मार्शलिंग एक बेहतर शब्द या गेटवे की इच्छा के लिए "मध्यम" है, जो पिनवाक का उपयोग करके अप्रबंधित दुनिया के डेटा प्रकारों और इसके विपरीत संवाद करने के लिए एक "मध्यम" है, और यह सुनिश्चित करता है कि डेटा सुरक्षित तरीके से वापस लौटाया जाए।

4

जैसा विंको टिप्पणियों में कहता है, आप बिना किसी विशेष मार्शलिंग के आदिम प्रकारों को पारित कर सकते हैं। इन्हें "ब्लिटेबल" प्रकार कहा जाता है और इसमें बाइट, शॉर्ट, इंट, लांग इत्यादि और उनके हस्ताक्षरित समकक्ष शामिल हैं।

इस पृष्ठ में blittable and non-blittable types की सूची शामिल है।

10

नेट कोड (सी #, VB) "प्रबंधित" कहा जाता है क्योंकि यह CLR द्वारा "प्रबंधित" है (Common Language Runtime)

आप सी या C++ कोड लिखने या कोडांतरक यह सब कहा जाता है "अप्रबंधित" के बाद से, तो कोई सीएलआर शामिल नहीं है। आप सभी स्मृति आवंटन/डी-आवंटन के लिए ज़िम्मेदार हैं।

मार्शलिंग प्रबंधित कोड और अप्रबंधित कोड के बीच की प्रक्रिया है; यह सीएलआर द्वारा प्रदान की जाने वाली सबसे महत्वपूर्ण सेवाओं में से एक है।

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