मैं के रूप में यह सीडेल्फी रिकॉर्ड में बिट-फ़ील्ड का अनुकरण कैसे करें?
में हैउन दिलचस्पी के लिए है कि एक ही लेआउट शामिल डेल्फी में एक रिकार्ड घोषित करने के लिए करना चाहते हैं: इस रिकॉर्ड Windows OS की LDT_ENTRY रिकॉर्ड में एक संघ का हिस्सा है। (मुझे डेल्फी में इस रिकॉर्ड का उपयोग करने की आवश्यकता है क्योंकि मैं डेल्फी में एक एक्सबॉक्स एमुलेटर पर काम कर रहा हूं - प्रोजेक्ट डीएक्सबीएक्स को स्रोत फोर्ज पर देखें)।
struct
{
DWORD BaseMid : 8;
DWORD Type : 5;
DWORD Dpl : 2;
DWORD Pres : 1;
DWORD LimitHi : 4;
DWORD Sys : 1;
DWORD Reserved_0 : 1;
DWORD Default_Big : 1;
DWORD Granularity : 1;
DWORD BaseHi : 8;
}
Bits;
जहाँ तक मुझे पता है, वहाँ कोई डेल्फी में संभव बिट क्षेत्र हैं:
वैसे भी, सवाल में रिकॉर्ड के रूप में परिभाषित किया गया है। उम्मीद 4. मैं चाहूँगा के बजाय यह आकार 10 बाइट्स बन जाता है, पता करने के लिए मैं रिकॉर्ड कैसे घोषित चाहिए, ताकि मैं एक ही लेआउट के साथ एक रिकॉर्ड मिलता है: मैं यह कोशिश की थी:
Bits = record
BaseMid: Byte; // 8 bits
_Type: 0..31; // 5 bits
Dpl: 0..3; // 2 bits
Pres: Boolean; // 1 bit
LimitHi: 0..15; // 4 bits
Sys: Boolean; // 1 bit
Reserved_0: Boolean; // 1 bit
Default_Big: Boolean; // 1 bit
Granularity: Boolean; // 1 bit
BaseHi: Byte; // 8 bits
end;
लेकिन अफसोस , एक ही आकार, और एक ही सदस्य। Preterrably गेटटर/सेटर्स के भार के बिना।
टीआईए।
यह वास्तव में एक अच्छा विचार है! – gabr
प्रशंसा के लिए धन्यवाद। मैंने कोड में कुछ गलतियां की हैं, जिन्हें मैंने अभी तय किया है, चीयर्स! – PatrickvL
धन्यवाद, यह बहुत उपयोगी है। "ध्वज" एक पूर्णांक प्रकार नहीं होना चाहिए? – JustMe