अन्य उत्तरों को थोड़ा अलग दृश्य प्रदान करने के प्रयास में, मैं इस तरह का उत्तर दूंगा।
(अस्वीकरण: मैं चीजों को थोड़ा सरल कर रहा हूं, जो स्थिति मैं देता हूं वह विशुद्ध रूप से काल्पनिक है और जीवन के लिए 100% सच होने के बजाय अवधारणाओं को प्रदर्शित करने के साधन के रूप में लिखा गया है)।
दूसरे दृष्टिकोण से चीजों के बारे में सोचें, कल्पना करें कि आपने मूल थ्रेडिंग, विंडोिंग और मेमोरी प्रबंधन क्षमताओं के साथ एक सरल ऑपरेटिंग सिस्टम लिखा है। आप C ++ लाइब्रेरी को यूजर्स को C ++ में प्रोग्राम करने देने के लिए लागू करना चाहते हैं और विंडो बनाना, विंडोज पर ड्रॉ करना आदि जैसे काम करते हैं। सवाल यह है कि यह कैसे किया जाए।
सबसे पहले, चूंकि C ++ मशीन कोड के लिए संकलित है, इसलिए आपको C ++ के साथ इंटरफ़ेस करने के लिए मशीन कोड का उपयोग करने का एक तरीका परिभाषित करना होगा। यह वह जगह है जहां फ़ंक्शन आते हैं, फ़ंक्शन तर्कों को स्वीकार करते हैं और रिटर्न मान देते हैं, इस प्रकार वे कोड के विभिन्न वर्गों के बीच डेटा स्थानांतरित करने का एक मानक तरीका प्रदान करते हैं। वे एक कॉलिंग कन्वेंशन के रूप में जाना जाने वाला कुछ स्थापित करके ऐसा करते हैं ।
एक कॉलिंग कन्वेंशन में कहा गया है कि कहां और कैसे तर्कों को स्मृति में रखा जाना चाहिए ताकि एक फ़ंक्शन उन्हें तब मिल सके जब इसे निष्पादित किया जाए। जब किसी फ़ंक्शन को कॉल किया जाता है, तो कॉलिंग फ़ंक्शन मेमोरी में तर्कों को रखता है और फिर सीपीयू को दूसरे फ़ंक्शन पर कूदने के लिए कहता है, जहां वह वापस जाने से पहले यह करता है कि यह कहाँ से बुलाया गया था। इसका मतलब यह है कि कोड कहा जा रहा है बिल्कुल कुछ भी हो सकता है और यह नहीं बदलेगा कि फ़ंक्शन कैसे कहा जाता है। हालांकि इस मामले में, फ़ंक्शन के पीछे का कोड ऑपरेटिंग सिस्टम के लिए प्रासंगिक होगा और ऑपरेटिंग सिस्टम की आंतरिक स्थिति पर काम करेगा।
इसलिए, कई महीनों बाद और आपको अपने सभी OS फ़ंक्शंस मिल गए हैं। आपके उपयोगकर्ता विंडो बनाने और उन पर आकर्षित करने के लिए फ़ंक्शन कॉल कर सकते हैं, वे थ्रेड और सभी प्रकार की अद्भुत चीजें बना सकते हैं। यहाँ समस्या यह है कि, आपके OS के फ़ंक्शंस लिनक्स के फ़ंक्शंस या विंडोज के फ़ंक्शंस से भिन्न होने जा रहे हैं। तो आप तय करते हैं कि आपको उपयोगकर्ता को एक मानक इंटरफ़ेस देने की आवश्यकता है ताकि वे पोर्टेबल कोड लिख सकें। यहीं क्यूटी अंदर आता है।
जैसा कि आप लगभग निश्चित रूप से जानते हैं, क्यूटी के पास उपयोगी वर्गों और कार्यों का भार है जो ऑपरेटिंग सिस्टम करते हैं, लेकिन एक तरह से अंतर्निहित ऑपरेटिंग सिस्टम से स्वतंत्र दिखाई देते हैं। जिस तरह से यह काम करता है वह यह है कि क्यूटी कक्षा और फ़ंक्शंस प्रदान करता है जो उपयोगकर्ता को दिखाई देने के तरीके में समान हैं, लेकिन फ़ंक्शंस के पीछे का कोड प्रत्येक ऑपरेटिंग सिस्टम के लिए अलग है। उदाहरण के लिए क्यूटी का QApplication :: closeAllWindows () वास्तव में उपयोग किए गए संस्करण के आधार पर प्रत्येक ऑपरेटिंग सिस्टम के विशेष विंडो समापन फ़ंक्शन को कॉल करेगा। विंडोज में यह सबसे अधिक संभावना है कि CloseWindow (hwnd) को कॉल करेगा, जबकि X विंडो सिस्टम का उपयोग करते हुए ओएस पर, यह संभवतः XDestroyWindow (डिस्प्ले, विंडो) को कॉल करेगा।
जैसा कि स्पष्ट है, एक ऑपरेटिंग सिस्टम में कई परतें होती हैं, जिनमें से सभी को कई किस्मों के इंटरफेस के माध्यम से इंटरैक्ट करना पड़ता है। ऐसे कई पहलू हैं जिन पर मैंने हाथ भी नहीं लगाया है, लेकिन उन सभी को समझाने में बहुत लंबा समय लगेगा। यदि आप ऑपरेटिंग सिस्टम के आंतरिक कामकाज में आगे रुचि रखते हैं, तो मैं ओएस देव विकी की जांच करने की सलाह देता हूं ।
हालांकि, यह ध्यान में रखें कि कई ऑपरेटिंग सिस्टम C / C ++ में इंटरफेस का खुलासा करने का कारण यह है कि वे मशीन कोड के लिए संकलित हैं, वे विधानसभा निर्देशों को अपने कोड के साथ मिश्रित करने की अनुमति देते हैं और वे प्रोग्रामर को एक महान डिग्री प्रदान करते हैं।
फिर, यहाँ बहुत कुछ चल रहा है। मैं यह बताना चाहता हूं कि पुस्तकालयों की तरह कैसे .so और .dll फ़ाइलों को C / C ++ में नहीं लिखा जाना चाहिए और इसे असेंबली या अन्य भाषाओं में लिखा जा सकता है, लेकिन मुझे लगता है कि अगर मैं और जोड़ूं तो मुझे भी पसंद आएगा एक पूरा लेख लिखें, और जितना मुझे करना अच्छा लगेगा कि मेरे पास इसे होस्ट करने के लिए कोई साइट नहीं है।