कल्पना कीजिए मैं एक समारोहPInvoke
Myfunction(const void * x);
मेरे सी # घोषणा कहा जाता है हो सकता है
MyFunction(IntPtr x);
इस कार्यात्मक और तकनीकी रूप से
struct MyStruct { IntPtr P; }
MyFunction(MyStruct x);
के बराबर है
या इसमें कोई अंतर होगा कि वे कैसे मार्शल किए गए हैं।
मैं यह पूछ रहा हूं क्योंकि जिस लाइब्रेरी को मैं कॉल कर रहा हूं वह सभी शून्य है, अन्य नामों के लिए टाइप किया गया है, और सी # में मैं टाइप सुरक्षा चाहता हूं, इसके लायक होने के लिए।
यह प्रश्न नीचे उबलता है: क्या एक सदस्य के साथ एक संरचना उस सदस्य के प्रकार के समान ही मार्शल हो गई है? जबकि मुझे नहीं पता, मैं * दृढ़ता से * संदेह नहीं करता। – BradleyDotNET
कोई सीधा जवाब नहीं है, लेकिन अतीत में मैंने हमेशा एक नई संरचना बनाई है जो इंटप्राट को लपेटती है (जैसे आप प्रस्तावित कर रहे हैं) जिसे "जो भी पीटीआर" कहा जाता है, जहां "जो भी" मेरा अप्रबंधित प्रकार है, और उसके बाद एक कस्टम मार्शलर का उपयोग कर ICustomMarshaller इंटरफ़ेस https://msdn.microsoft.com/en-us/library/d3cxf9f0(v=vs.90).aspx फिर आप स्क्रू नहीं कर सकते और अपने IntPtrs को मिश्रित नहीं कर सकते हैं। यह भी अधिक स्वयं दस्तावेज है, हालांकि आपको बॉयलरप्लेट कोड का थोड़ा सा मंथन करना होगा। ऐसा लगता है कि मार्शलर जादुई रूप से थूक जाएगा या आपकी संरचना –