2008-12-26 14 views
5

मैं सी # से डीएलएल को कॉल करने के साथ झुका रहा हूं, और अपने खुद के structs को परिभाषित करने की आवश्यकता में आया। तो, मैं सूट का पालन किया लेख के बहुत सारेमुझे स्पष्ट रूप से स्ट्रक्चरआउट निर्दिष्ट करना चाहिए?

[StructLayout(LayoutKind.Sequential)] 
struct Foo ... 

साथ struct के लिए एक अनुक्रमिक लेआउट के लिए मजबूर हैं, और मेरे कार्यक्रम में काम किया। अब, जब मैंने लाइन ली, तो यह अभी भी काम करता है। मुझे इसकी ज़रूरत क्यों है?

उत्तर

4

एक प्रबंधित संरचना का आंतरिक लेआउट अनियंत्रित और अनदेखा है। सदस्य आदेश और पैकिंग जैसे कार्यान्वयन विवरण जानबूझकर छिपे हुए हैं। [स्ट्रक्चरलाउट] विशेषता के साथ, आप पी/Invoc marshaller को एक विशिष्ट लेआउट और पैकिंग लगाने के लिए मजबूर करते हैं।

कि डिफॉल्ट केवल उस मैच से मेल खाता है जो आपको अपना कोड काम करने के लिए आवश्यक है, केवल एक दुर्घटना है। हालांकि एक असामान्य नहीं है। Type.StructLayoutAttribute प्रॉपर्टी पर ध्यान दें।

+0

उत्तर के लिए धन्यवाद। मैंने बस उस रेखा के साथ और उसके बिना मेरी संरचना के स्ट्रक्चरलेआउट एट्रिब्यूट पर एक नज़र डाली थी। लगता है कि दोनों मुझे अनुक्रमिक देते हैं। क्या यह डिफ़ॉल्ट है? – biozinc

+1

हां। मुझे किसी कारण से 10 वर्ण टाइप करना होगा ... –

0

मुझे पूरी तरह से यकीन नहीं है, लेकिन यह बाइनरी क्रमबद्धता को प्रभावित कर सकता है - यह जानकारी नामकरण या ऑर्डर करने के क्रम में फ़ील्ड थूक सकता है (जिसके परिणामस्वरूप एक छोटी फ़ाइल होती है), लेकिन यह एक पूर्ण इच्छा है।

1

दिलचस्प बिंदु। मुझे यकीन है कि मेरे पास कोड था जो तब तक विफल रहा जब तक कि मैं एक स्पष्ट लेआउटकिंड में नहीं डालता था। हालांकि, मैंने पुष्टि की है कि अनुक्रमिक 1.1 में भी संरचनाओं के लिए डिफ़ॉल्ट है।

नोट VB Reference for Structure टिप्पणियां> व्यवहार> मेमोरी की खपत है कि आप स्मृति लेआउट पुष्टि करने के लिए StructLayout निर्दिष्ट करने की आवश्यकता है पर निकलता है, लेकिन StructLayoutAttribute के लिए दस्तावेज़ में कहा गया है अनुक्रमिक माइक्रोसॉफ्ट compilers में संरचनाओं के लिए डिफ़ॉल्ट है।

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