चलो कहते हैं कि मैं सी में निम्नलिखित structs है ++सी # marshaling सी ++ struct विरासत
struct Base
{
USHORT size;
}
struct Inherited : public Base
{
BYTE type;
}
मैं सी # में Inherited
मार्शल करने के लिए चाहते हैं, लेकिन struct विरासत सी # काम नहीं करता हूँ। निम्नलिखित उपयुक्त कर रहा है?
public interface IBase
{
ushort Size { get; set; }
}
[StructLayout(LayoutKind.Sequential)]
public struct Inherited : IBase
{
public ushort Size { get; set; }
public byte Type { get; set; }
}
मैंने यहां समस्या को सरल बना दिया और मेरे structs परिणाम को मान्य करना मुश्किल बना रहे हैं। साथ ही, structs किसी अन्य सॉफ़्टवेयर से आ रहे हैं जो इतना अच्छा दस्तावेज़ नहीं है जिससे परिणाम को सत्यापित करना मुश्किल हो जाता है। सी ++ में विरासत का उपयोग करते समय, बाल संरचना से पहले या उसके बाद बेस क्लास फ़ील्ड हैं?
मैं बेस फ़ील्ड को उपस्थित होने के लिए IBase
का उपयोग कर रहा हूं।
दुर्भाग्यवश, मेरे पास सी ++ पक्ष (बाहरी प्रणाली के लिए एसडीके के साथ एकीकृत) पर नियंत्रण नहीं है।
मुझे लगता है कि बेस स्ट्रक्चर को सी ++ मेमोरी लेआउट में पहले आने की अपेक्षा करना अनुचित नहीं है, जैसे कि यह पहला सदस्य था (लेकिन मुझे नहीं लगता कि यह मानकीकृत है)। या तुमने कोशिश की? –
@TheodorosChatzigiannakis हां, मैंने कोशिश की और कोड चलाया लेकिन जैसा कि मैंने कहा: "[...] मेरे structs बड़े पैमाने पर परिणाम को मान्य करना मुश्किल बनाते हैं।" यही कारण है कि मैं अपने हाइपोटिस को प्रमाणित करने की कोशिश कर रहा हूं। आपके इनपुट के लिए धन्यवाद! – KOTIX
आपको शायद गुणों के बजाय फ़ील्ड का उपयोग करना चाहिए, लेकिन मुझे नहीं पता कि यह काम करेगा या नहीं। –