विंडोज एपीआई: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 1: Line 1:
{{Short description|Microsoft's core set of application programming interfaces on Windows}}
{{Short description|Microsoft's core set of application programming interfaces on Windows}}
विंडोज [[एपीआई]], अनौपचारिक रूप से विनएपीआई, [[माइक्रोसॉफ़्ट विंडोज़]] ऑपरेटिंग सिस्टम में उपलब्ध एप्लिकेशन प्रोग्रामिंग इंटरफेस (एपीआई) का माइक्रोसॉफ्ट का कोर सेट है। विंडोज एपीआई, नाम सामूहिक रूप से कई अलग-अलग प्लेटफ़ॉर्म कार्यान्वयनों को संदर्भित करता है जिन्हें अक्सर अपने स्वयं के नामों से संदर्भित किया जाता है (उदाहरण के लिए, विन 32 एपीआई); संस्करण अनुभाग देखें। लगभग सभी विंडोज प्रोग्राम विंडोज एपीआई के साथ इंटरैक्ट करते हैं। ऑपरेटिंग सिस्टम की [[विंडोज एनटी स्टार्टअप प्रक्रिया|विंडोज एनटी]] लाइन पर, एक छोटी संख्या (जैसे कि विंडोज स्टार्टअप प्रक्रिया के शुरू में शुरू होने वाले प्रोग्राम) नेटिव [[देशी एपीआई|एपीआई]] का उपयोग करते हैं।<ref name="technet-nativeapi">{{cite web|website=[[Microsoft Docs]]|date=November 2006|url=https://docs.microsoft.com/en-us/sysinternals/resources/inside-native-applications|title=नेटिव एप्लिकेशन के अंदर|first=Mark|last=Russinovich|author-link=Mark Russinovich|access-date=April 12, 2022}}</ref>
विंडोज [[एपीआई]], अनौपचारिक रूप से विनएपीआई, [[माइक्रोसॉफ़्ट विंडोज़]] ऑपरेटिंग सिस्टम में उपलब्ध एप्लिकेशन प्रोग्रामिंग इंटरफेस (एपीआई) का माइक्रोसॉफ्ट का कोर सेट है। विंडोज एपीआई, नाम सामूहिक रूप से कई अलग-अलग प्लेटफ़ॉर्म कार्यान्वयनों को संदर्भित करता है जिन्हें प्रायः अपने स्वयं के नामों से संदर्भित किया जाता है (उदाहरण के लिए, विन 32 एपीआई); संस्करण अनुभाग देखें। लगभग सभी विंडोज प्रोग्राम विंडोज एपीआई के साथ इंटरैक्ट करते हैं। ऑपरेटिंग सिस्टम की [[विंडोज एनटी स्टार्टअप प्रक्रिया|विंडोज एनटी]] लाइन पर, एक छोटी संख्या (जैसे कि विंडोज स्टार्टअप प्रक्रिया के प्रारम्भ में प्रारम्भ होने वाले प्रोग्राम) नेटिव [[देशी एपीआई|एपीआई]] का उपयोग करते हैं।<ref name="technet-nativeapi">{{cite web|website=[[Microsoft Docs]]|date=November 2006|url=https://docs.microsoft.com/en-us/sysinternals/resources/inside-native-applications|title=नेटिव एप्लिकेशन के अंदर|first=Mark|last=Russinovich|author-link=Mark Russinovich|access-date=April 12, 2022}}</ref>


डेवलपर समर्थन [[सॉफ़्टवेयर विकास किट|सॉफ़्टवेयर]] डेवलपमेंट किट, माइक्रोसॉफ्ट विंडोज एसडीके ([[Microsoft Windows SDK]]) के रूप में उपलब्ध है, जो विंडोज एपीआई और संबद्ध विंडोज इंटरफ़ेस पर आधारित सॉफ़्टवेयर बनाने के लिए आवश्यक दस्तावेज़ और टूल प्रदान करता है।
डेवलपर समर्थन [[सॉफ़्टवेयर विकास किट|सॉफ़्टवेयर]] डेवलपमेंट किट, माइक्रोसॉफ्ट विंडोज एसडीके ([[Microsoft Windows SDK]]) के रूप में उपलब्ध है, जो विंडोज एपीआई और संबद्ध विंडोज इंटरफ़ेस पर आधारित सॉफ़्टवेयर बनाने के लिए आवश्यक दस्तावेज़ और टूल प्रदान करता है।


विंडोज एपीआई (विन32) मुख्य रूप से प्रोग्रामिंग भाषा सी (C) पर केंद्रित है<ref>{{cite web|url=https://docs.microsoft.com/en-us/cpp/windows/walkthrough-creating-windows-desktop-applications-cpp|title=पूर्वाभ्यास: एक पारंपरिक विंडोज़ डेस्कटॉप अनुप्रयोग बनाएँ (C++)|date=February 23, 2022|website=[[Microsoft Docs]]}}</ref>, जिसमें इसके खुला कार्यों और डेटा संरचनाओं को इसके प्रलेखन के हाल के संस्करणों में उस भाषा में वर्णित किया गया है। हालांकि, एपीआई का उपयोग किसी भी प्रोग्रामिंग लैंग्वेज कंपाइलर या असेंबलर द्वारा किया जा सकता है जो कॉल और [[कॉलबैक (कंप्यूटर प्रोग्रामिंग)|कॉलबैक]] के लिए निर्धारित [[कॉलिंग कन्वेंशन]] के साथ (अच्छी तरह से परिभाषित) निम्न-स्तरीय डेटा संरचनाओं को संभालने में सक्षम है। इसी तरह, एपीआई के कार्य के आंतरिक कार्यान्वयन को ऐतिहासिक रूप से कई भाषाओं में विकसित किया गया है। [ए] इस तथ्य के बावजूद कि सी ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषा नहीं है, विंडोज एपीआई और विंडोज दोनों को ऐतिहासिक रूप से ऑब्जेक्ट-ओरिएंटेड के रूप में वर्णित किया गया है। ऑब्जेक्ट-ओरिएंटेड भाषाओं के लिए कई रैपर क्लासेस और एक्सटेंशन (माइक्रोसॉफ्ट और अन्य से) भी हैं जो इस ऑब्जेक्ट-ओरिएंटेड स्ट्रक्चर ([[वस्तु उन्मुख कार्यकर्म]]) को अधिक स्पष्ट (माइक्रोसॉफ्ट [[माइक्रोसॉफ्ट फाउंडेशन क्लास लाइब्रेरी|फाउंडेशन क्लास लाइब्रेरी]] (एमएफसी), विजुअल कंपोनेंट लाइब्रेरी (वीसीएल), [[जीडीआई+]], आदि) बनाते हैं। . उदाहरण के लिए, [[विंडोज 8]] विंडोज एपीआई और [[विनआरटी]] एपीआई प्रदान करता है, जो [[सी ++]] (C++)<ref name="rtcpp">{{cite book |title=WinRT से पता चला|publisher=Apress |author=Mayberry, Michael |year=2012 |location=New York City |pages=3 |isbn=978-1-4302-4585-8}}</ref> में लागू किया गया है और डिजाइन द्वारा ऑब्जेक्ट-ओरिएंटेड है।<ref name="rtcpp" />
विंडोज एपीआई (विन32) मुख्य रूप से प्रोग्रामिंग भाषा सी (C) पर केंद्रित है<ref>{{cite web|url=https://docs.microsoft.com/en-us/cpp/windows/walkthrough-creating-windows-desktop-applications-cpp|title=पूर्वाभ्यास: एक पारंपरिक विंडोज़ डेस्कटॉप अनुप्रयोग बनाएँ (C++)|date=February 23, 2022|website=[[Microsoft Docs]]}}</ref>, जिसमें इसके खुला कार्यों और डेटा संरचनाओं को इसके प्रलेखन के हाल के संस्करणों में उस भाषा में वर्णित किया गया है। हालांकि, एपीआई का उपयोग किसी भी प्रोग्रामिंग लैंग्वेज कंपाइलर या असेंबलर द्वारा किया जा सकता है जो कॉल और [[कॉलबैक (कंप्यूटर प्रोग्रामिंग)|कॉलबैक]] के लिए निर्धारित [[कॉलिंग कन्वेंशन]] के साथ (अच्छी तरह से परिभाषित) निम्न-स्तरीय डेटा संरचनाओं को संभालने में सक्षम है। इसी तरह, एपीआई के कार्य के आंतरिक कार्यान्वयन को ऐतिहासिक रूप से कई भाषाओं में विकसित किया गया है। [इस तथ्य के बावजूद कि सी ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषा नहीं है, विंडोज एपीआई और विंडोज दोनों को ऐतिहासिक रूप से ऑब्जेक्ट-ओरिएंटेड के रूप में वर्णित किया गया है। ऑब्जेक्ट-ओरिएंटेड भाषाओं के लिए कई रैपर क्लासेस और एक्सटेंशन (माइक्रोसॉफ्ट और अन्य से) भी हैं जो इस ऑब्जेक्ट-ओरिएंटेड स्ट्रक्चर ([[वस्तु उन्मुख कार्यकर्म]]) को अधिक स्पष्ट (माइक्रोसॉफ्ट [[माइक्रोसॉफ्ट फाउंडेशन क्लास लाइब्रेरी|फाउंडेशन क्लास लाइब्रेरी]] (एमएफसी), विजुअल कंपोनेंट लाइब्रेरी (वीसीएल), [[जीडीआई+]], आदि) बनाते हैं। उदाहरण के लिए, [[विंडोज 8]] विंडोज एपीआई और [[विनआरटी]] एपीआई प्रदान करता है, जो [[सी ++]] (C++)<ref name="rtcpp">{{cite book |title=WinRT से पता चला|publisher=Apress |author=Mayberry, Michael |year=2012 |location=New York City |pages=3 |isbn=978-1-4302-4585-8}}</ref> में लागू किया गया है और डिजाइन द्वारा ऑब्जेक्ट-ओरिएंटेड है।<ref name="rtcpp" />
== अवलोकन ==
== अवलोकन ==
विंडोज एपीआई द्वारा प्रदान किए गए कार्यों को आठ श्रेणियों में बांटा जा सकता है:<ref name="msdn-overview2">[[Microsoft Developer Network]] (July 2005). ''[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/overview_of_the_windows_api.asp Overview of the Windows API.]'' Retrieved August 28, 2005.</ref>
विंडोज एपीआई द्वारा प्रदान किए गए कार्यों को आठ श्रेणियों में बांटा जा सकता है:<ref name="msdn-overview2">[[Microsoft Developer Network]] (July 2005). ''[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/overview_of_the_windows_api.asp Overview of the Windows API.]'' Retrieved August 28, 2005.</ref>
; बेस सर्विसेज:<ref name="msdn-base">[[Microsoft Developer Network]] (July 2005). ''[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/base_services.asp Base Services.]'' Retrieved August 28, 2005.</ref> विंडोज सिस्टम के लिए उपलब्ध मूलभूत संसाधनों तक पहुंच प्रदान करें। इसमें [[फाइल सिस्टम]], डिवाइस, प्रोसेस, थ्रेड्स और एरर हैंडलिंग जैसी चीजें सम्मिलित हैं। ये कार्य 16-बिट विंडोज़ पर kernel.exe, krnl286.exe या krnl386.exe फ़ाइलों में रहते हैं, और 32 और 64 बिट विंडोज़ पर kernel32.dll और KernelBase.dll में रहते हैं। ये फ़ाइलें Windows के सभी संस्करणों पर \Windows\System32 फ़ोल्डर में रहती हैं।
; बेस सर्विसेज:<ref name="msdn-base">[[Microsoft Developer Network]] (July 2005). ''[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/base_services.asp Base Services.]'' Retrieved August 28, 2005.</ref> विंडोज सिस्टम के लिए उपलब्ध मूलभूत संसाधनों तक पहुंच प्रदान करें। इसमें [[फाइल सिस्टम]], डिवाइस, प्रोसेस, थ्रेड्स और एरर हैंडलिंग जैसी चीजें सम्मिलित हैं। ये कार्य 16-बिट विंडोज़ पर kernel.exe, krnl286.exe या krnl386.exe फ़ाइलों में रहते हैं, और 32 और 64 बिट विंडोज़ पर kernel32.dll और KernelBase.dll में रहते हैं। ये फ़ाइलें Windows के सभी संस्करणों पर \Windows\System32 फ़ोल्डर में रहती हैं।
; उन्नत सेवाएं
; उन्नत सेवाएं
: कर्नेल से परे कार्यों तक पहुंच प्रदान करें। [[विंडोज रजिस्ट्री]], शटडाउन/सिस्टम को फिर से शुरू करना (या निरस्त करना), [[विंडोज़ सेवा|विंडोज़]] सेवा शुरू/रोकना/बनाना और उपयोगकर्ता खातों को प्रबंधित करने जैसी चीजें सम्मिलित हैं। ये कार्य 32-बिट विंडोज पर advapi32.dll और advapires32.dll में रहते हैं।
: कर्नेल से परे कार्यों तक पहुंच प्रदान करें। [[विंडोज रजिस्ट्री]], शटडाउन/सिस्टम को फिर से प्रारम्भ करना (या निरस्त करना), [[विंडोज़ सेवा|विंडोज़]] सेवा प्रारम्भ/रोकना/बनाना और उपयोगकर्ता खातों को प्रबंधित करने जैसी चीजें सम्मिलित हैं। ये कार्य 32-बिट विंडोज पर advapi32.dll और advapires32.dll में रहते हैं।
; [[ग्राफिक्स डिवाइस इंटरफ़ेस]]:<ref name="msdn-gdi">[[Microsoft Developer Network]] (July 2005). ''[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/graphics_device_interface.asp Graphics Device Interface.]'' Retrieved August 28, 2005.</ref> मॉनिटर, प्रिंटर और अन्य [[आउटपुट डिवाइस]] के लिए ग्राफिक्स कंटेंट को आउटपुट करने के लिए फ़ंक्शन प्रदान करता है। यह उपयोगकर्ता मोड में 16-बिट विंडोज़ पर gdi.exe और 32-बिट विंडोज़ पर gdi32.dll में रहता है। कर्नेल-मोड GDI समर्थन win32k.sys द्वारा प्रदान किया जाता है जो सीधे ग्राफिक्स ड्राइवर के साथ संचार करता है।<ref>{{cite web|url=http://msdn.microsoft.com/en-us/library/ms789535.aspx|title=जी|publisher=[[Microsoft Developer Network]]|access-date=2009-01-28}}</ref>
; [[ग्राफिक्स डिवाइस इंटरफ़ेस]]:<ref name="msdn-gdi">[[Microsoft Developer Network]] (July 2005). ''[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/graphics_device_interface.asp Graphics Device Interface.]'' Retrieved August 28, 2005.</ref> मॉनिटर, प्रिंटर और अन्य [[आउटपुट डिवाइस]] के लिए ग्राफिक्स कंटेंट को आउटपुट करने के लिए फ़ंक्शन प्रदान करता है। यह उपयोगकर्ता मोड में 16-बिट विंडोज़ पर gdi.exe और 32-बिट विंडोज़ पर gdi32.dll में रहता है। कर्नेल-मोड GDI समर्थन win32k.sys द्वारा प्रदान किया जाता है जो सीधे ग्राफिक्स ड्राइवर के साथ संचार करता है।<ref>{{cite web|url=http://msdn.microsoft.com/en-us/library/ms789535.aspx|title=जी|publisher=[[Microsoft Developer Network]]|access-date=2009-01-28}}</ref>
; [[विंडोज़ उपयोगकर्ता|यूजर इंटरफेस]]:<ref name="msdn-ui">[[Microsoft Developer Network]] (July 2005). ''[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/user_interface.asp User Interface.]'' Retrieved August 28, 2005.</ref> स्क्रीन [[विंडो (कम्प्यूटिंग)|विंडो]] बनाने और प्रबंधित करने के लिए फ़ंक्शन प्रदान करता है और अधिकांश बुनियादी नियंत्रण, जैसे [[बटन (कंप्यूटिंग)|बटन]] और [[स्क्रॉल बार|क्रॉलबार]], माउस और कीबोर्ड इनपुट प्राप्त करते हैं, और विंडोज़ के [[ग्राफिकल यूज़र इंटरफ़ेस]] (जीयूआई) भाग से जुड़े अन्य फ़ंक्शन प्रदान करता है। यह कार्यात्मक इकाई 16-बिट विंडोज़ पर user.exe और 32-बिट विंडोज़ पर user32.dll में स्थित है। विंडोज एक्सपी ([[Windows XP]]) संस्करणों के बाद से, सामान्य नियंत्रण (सामान्य नियंत्रण लाइब्रेरी) के साथ, मूल नियंत्रण comctl32.dll में रहते हैं।
; [[विंडोज़ उपयोगकर्ता|यूजर इंटरफेस]]:<ref name="msdn-ui">[[Microsoft Developer Network]] (July 2005). ''[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/user_interface.asp User Interface.]'' Retrieved August 28, 2005.</ref> स्क्रीन [[विंडो (कम्प्यूटिंग)|विंडो]] बनाने और प्रबंधित करने के लिए फ़ंक्शन प्रदान करता है और अधिकांश बुनियादी नियंत्रण, जैसे [[बटन (कंप्यूटिंग)|बटन]] और [[स्क्रॉल बार|क्रॉलबार]], माउस और कीबोर्ड इनपुट प्राप्त करते हैं, और विंडोज़ के [[ग्राफिकल यूज़र इंटरफ़ेस]] (जीयूआई) भाग से जुड़े अन्य फ़ंक्शन प्रदान करता है। यह कार्यात्मक इकाई 16-बिट विंडोज़ पर user.exe और 32-बिट विंडोज़ पर user32.dll में स्थित है। विंडोज एक्सपी ([[Windows XP]]) संस्करणों के बाद से, सामान्य नियंत्रण (सामान्य नियंत्रण लाइब्रेरी) के साथ, मूल नियंत्रण comctl32.dll में रहते हैं।
Line 18: Line 18:


=== वेब ===
=== वेब ===
[[इंटरनेट एक्स्प्लोरर]] (आईई) वेब ब्राउजर भी कई एपीआई को अनावृत करता है जो अक्सर अनुप्रयोगों द्वारा उपयोग किया जाता है, और इस तरह इसे विंडोज एपीआई का एक हिस्सा माना जा सकता है। आईई को विंडोज 95 ओएसआर2 के बाद से ऑपरेटिंग सिस्टम के साथ सम्मिलित किया गया है और [[विंडोज 98]] के बाद से अनुप्रयोगों के लिए वेब-संबंधित सेवाएं प्रदान की गई हैं।<ref name="msdn-browser">[[Microsoft Developer Network]] (January 2006); ''[http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/prog_browser_node_entry.asp Programming and reusing the browser]'' Retrieved January 22, 2006.</ref>  विशेष रूप से, यह प्रदान करने के लिए प्रयोग किया जाता है:
[[इंटरनेट एक्स्प्लोरर]] (आईई) वेब ब्राउजर भी कई एपीआई को अनावृत करता है जो प्रायः अनुप्रयोगों द्वारा उपयोग किया जाता है, और इस तरह इसे विंडोज एपीआई का एक हिस्सा माना जा सकता है। आईई को विंडोज 95 ओएसआर2 के बाद से ऑपरेटिंग सिस्टम के साथ सम्मिलित किया गया है और [[विंडोज 98]] के बाद से अनुप्रयोगों के लिए वेब-संबंधित सेवाएं प्रदान की गई हैं।<ref name="msdn-browser">[[Microsoft Developer Network]] (January 2006); ''[http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/prog_browser_node_entry.asp Programming and reusing the browser]'' Retrieved January 22, 2006.</ref>  विशेष रूप से, यह प्रदान करने के लिए प्रयोग किया जाता है:


* एम्बेड करने योग्य वेब ब्राउज़र नियंत्रण, shdocvw.dll और mshtml.dll में समाहित है।
* एम्बेड करने योग्य वेब ब्राउज़र नियंत्रण, shdocvw.dll और mshtml.dll में समाहित है।
Line 44: Line 44:


मीडिया एन्कोडिंग और प्लेबैक के लिए माइक्रोसॉफ्ट कई एपीआई भी प्रदान करता है:
मीडिया एन्कोडिंग और प्लेबैक के लिए माइक्रोसॉफ्ट कई एपीआई भी प्रदान करता है:
* डायरेक्टशो, जो सामान्य मल्टीमीडिया पाइपलाइनों का निर्माण और संचालन करता है। यह जी स्ट्रीमर ([[जीस्ट्रीमर|जी स्ट्रीमर]]) फ्रेमवर्क के बराबर है और अक्सर इन-गेम वीडियो रेंडर करने और मीडिया प्लेयर बनाने के लिए उपयोग किया जाता है ([[विंडोज़ मीडिया प्लेयर]] इस पर आधारित है)। गेम डेवलपमेंट के लिए अब डायरेक्टशो की अनुशंसा नहीं की जाती है।
* डायरेक्टशो, जो सामान्य मल्टीमीडिया पाइपलाइनों का निर्माण और संचालन करता है। यह जी स्ट्रीमर ([[जीस्ट्रीमर|जी स्ट्रीमर]]) फ्रेमवर्क के बराबर है और प्रायः इन-गेम वीडियो रेंडर करने और मीडिया प्लेयर बनाने के लिए उपयोग किया जाता है ([[विंडोज़ मीडिया प्लेयर]] इस पर आधारित है)। गेम डेवलपमेंट के लिए अब डायरेक्टशो की अनुशंसा नहीं की जाती है।
*[[मीडिया फाउंडेशन]], नया डिजिटल मीडिया एपीआई, जो [[डायरेक्टशो]] को बदलने का इरादा रखता है।
*[[मीडिया फाउंडेशन]], नया डिजिटल मीडिया एपीआई, जो [[डायरेक्टशो]] को बदलने का इरादा रखता है।


=== प्रोग्राम इंटरेक्शन ===
=== प्रोग्राम इंटरेक्शन ===
विंडोज एपीआई को ज्यादातर [[ऑपरेटिंग सिस्टम]] और एप्लिकेशन के बीच बातचीत के लिए डिज़ाइन किया गया है। विभिन्न विंडोज अनुप्रयोगों के बीच संचार के लिए, माइक्रोसॉफ्ट ने मुख्य विंडोज एपीआई के साथ-साथ कई तकनीकों का विकास किया है। यह डायनेमिक डेटा एक्सचेंज (डीडीई) के साथ शुरू हुआ, जिसे ऑब्जेक्ट लिंकिंग एंड एंबेडिंग (ओएलई) और बाद में कंपोनेंट ऑब्जेक्ट मॉडल (COM), ऑटोमेशन ऑब्जेक्ट्स, [[एक्टिवेक्स]] कंट्रोल्स और .NET फ्रेमवर्क द्वारा अधिक्रमित किया गया था। इन तकनीकों के बीच हमेशा स्पष्ट अंतर नहीं होता है, और बहुत कुछ ओवरलैप होता है।
विंडोज एपीआई को ज्यादातर [[ऑपरेटिंग सिस्टम]] और एप्लिकेशन के बीच बातचीत के लिए डिज़ाइन किया गया है। विभिन्न विंडोज अनुप्रयोगों के बीच संचार के लिए, माइक्रोसॉफ्ट ने मुख्य विंडोज एपीआई के साथ-साथ कई तकनीकों का विकास किया है। यह डायनेमिक डेटा एक्सचेंज (डीडीई) के साथ प्रारम्भ हुआ, जिसे ऑब्जेक्ट लिंकिंग एंड एंबेडिंग (ओएलई) और बाद में कंपोनेंट ऑब्जेक्ट मॉडल (COM), ऑटोमेशन ऑब्जेक्ट्स, [[एक्टिवेक्स]] कंट्रोल्स और .NET फ्रेमवर्क द्वारा अधिक्रमित किया गया था। इन तकनीकों के बीच हमेशा स्पष्ट अंतर नहीं होता है, और बहुत कुछ ओवरलैप होता है।


शब्दों की विविधता मूल रूप से सॉफ्टवेयर तंत्र के समूहीकरण का परिणाम है जो सॉफ्टवेयर विकास के दिए गए पहलू से संबंधित है। स्वचालन विशेष रूप से एप्लिकेशन या घटक ([[अप्लिकेशन प्रोग्रामिंग अंतरफलक|एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस]] (एपीआई) के रूप में) के कार्य को निर्यात करने से संबंधित है ताकि इसे केवल मानव उपयोगकर्ताओं के बजाय अन्य अनुप्रयोगों द्वारा नियंत्रित किया जा सके। विभिन्न प्रकार के जस्ट-इन-टाइम (JIT) संकलित भाषाओं में लिखित डेस्कटॉप और वेब एप्लिकेशन विकसित करें।
शब्दों की विविधता मूल रूप से सॉफ्टवेयर तंत्र के समूहीकरण का परिणाम है जो सॉफ्टवेयर विकास के दिए गए पहलू से संबंधित है। स्वचालन विशेष रूप से एप्लिकेशन या घटक ([[अप्लिकेशन प्रोग्रामिंग अंतरफलक|एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस]] (एपीआई) के रूप में) के कार्य को निर्यात करने से संबंधित है ताकि इसे केवल मानव उपयोगकर्ताओं के बजाय अन्य अनुप्रयोगों द्वारा नियंत्रित किया जा सके। विभिन्न प्रकार के जस्ट-इन-टाइम (JIT) संकलित भाषाओं में लिखित डेस्कटॉप और वेब एप्लिकेशन विकसित करें।
Line 59: Line 59:


== इतिहास ==
== इतिहास ==
विंडोज एपीआई ने हमेशा विंडोज सिस्टम की अंतर्निहित संरचना के एक बड़े हिस्से को प्रोग्रामरों के सामने उजागर किया है। इससे उन्हें अपने अनुप्रयोगों पर अधिक लचीलापन और शक्ति देने का लाभ मिला, लेकिन यह भी बड़ी जिम्मेदारी पैदा करता है कि कैसे एप्लिकेशन विभिन्न निम्न-स्तर, कभी-कभी थकाऊ, संचालन को संभालते हैं जो एक ग्राफिकल यूजर इंटरफेस से जुड़े होते हैं।
विंडोज एपीआई (Windows API) ने हमेशा विंडोज सिस्टम की अंतर्निहित संरचना के एक बड़े हिस्से को प्रोग्रामरों के सामने उजागर किया है। इससे उन्हें अपने अनुप्रयोगों पर अधिक लचीलापन और शक्ति देने का लाभ मिला, लेकिन यह भी बड़ी जिम्मेदारी पैदा करता है कि कैसे एप्लिकेशन विभिन्न निम्न-स्तर, कभी-कभी थकाऊ, संचालन को संभालते हैं जो एक ग्राफिकल यूजर इंटरफेस से जुड़े होते हैं।


उदाहरण के लिए, शुरुआती सी प्रोग्रामर अक्सर अपने पहले असाइनमेंट के रूप में सरल "हैलो वर्ल्ड" लिखेंगे। मुख्य उपनेमका के भीतर कार्यक्रम का कामकाजी हिस्सा केवल प्रिंटएफ लाइन है। मानक I/O लाइब्रेरी से लिंक करने का ओवरहेड भी केवल लाइन है:{{Wikibooks|Computer Programming|Hello world#Windows API (in C)}}
'''उदाहरण के लिए, शुरुआती सी प्रोग्रामर प्रायः''' अपने पहले असाइनमेंट के रूप में सरल "हैलो वर्ल्ड" लिखेंगे। मुख्य उपनेमका के भीतर कार्यक्रम का कामकाजी हिस्सा केवल प्रिंटएफ लाइन है। मानक I/O लाइब्रेरी से लिंक करने का ओवरहेड भी केवल लाइन है:{{Wikibooks|Computer Programming|Hello world#Windows API (in C)}}
<syntaxhighlight lang="c++">#include <stdio.h>
<syntaxhighlight lang="c++">#include <stdio.h>


Line 68: Line 68:
}</syntaxhighlight>
}</syntaxhighlight>


विंडोज संस्करण अभी भी कोड की केवल एक कामकाजी लाइन थी लेकिन इसके लिए ओवरहेड की कई और अधिक लाइनों की आवश्यकता थी। विंडोज एपीआई के लिए प्रोग्रामिंग के बारे में कई किताबें लिखने वाले [[चार्ल्स पेटज़ोल्ड]] ने कहा: "विंडोज 1.0 एसडीके में मूल [[हैलो वर्ल्ड प्रोग्राम]] थोड़ा सा स्कैंडल था। HELLO.C लगभग 150 लाइन लंबी थी, और HELLO.RC संसाधन स्क्रिप्ट और 20 या उससे अधिक पंक्तियाँ थीं। (...) अनुभवी प्रोग्रामर अक्सर विंडोज हैलो-वर्ल्ड प्रोग्राम का सामना करते समय डरावनी या हँसी में डूब जाते थे।"<ref name="petzold-47">[[Charles Petzold]] (December 2001). ''Programming Microsoft Windows with C#''. Microsoft Press. Beyond the Console, page 47.</ref>
विंडोज संस्करण अभी भी कोड की केवल एक कामकाजी लाइन थी लेकिन इसके लिए ओवरहेड की कई और अधिक लाइनों की आवश्यकता थी। विंडोज एपीआई के लिए प्रोग्रामिंग के बारे में कई किताबें लिखने वाले [[चार्ल्स पेटज़ोल्ड]] ने कहा: "विंडोज 1.0 एसडीके में मूल [[हैलो वर्ल्ड प्रोग्राम]] थोड़ा सा स्कैंडल था। HELLO.C लगभग 150 लाइन लंबी थी, और HELLO.RC संसाधन स्क्रिप्ट और 20 या उससे अधिक पंक्तियाँ थीं। (...) अनुभवी प्रोग्रामर प्रायः विंडोज हैलो-वर्ल्ड प्रोग्राम का सामना करते समय डरावनी या हँसी में डूब जाते थे।"<ref name="petzold-47">[[Charles Petzold]] (December 2001). ''Programming Microsoft Windows with C#''. Microsoft Press. Beyond the Console, page 47.</ref>


इन वर्षों में, विंडोज सिस्टम में कई बदलाव और परिवर्धन किए गए, और विंडोज एपीआई इसे बदलने के लिए बदल गया और बढ़ा।<ref name="winapi-changes">''[http://abi-laboratory.pro/index.php?view=winapi Detailed analysis of changes in the Windows API from XP to 10.]'' Retrieved September 08, 2016.</ref> विंडोज 1.0 के लिए विंडोज एपीआई 450 से कम फ़ंक्शन कॉल का समर्थन करता है, जबकि विंडोज एपीआई के आधुनिक संस्करण हजारों का समर्थन करते हैं। हालांकि, सामान्य तौर पर, इंटरफ़ेस काफी सुसंगत रहा, और एक पुराना विंडोज 1.0 एप्लिकेशन अभी भी एक प्रोग्रामर को परिचित लगेगा जो आधुनिक विंडोज एपीआई के लिए उपयोग किया जाता है।<ref name="petzold-9">[[Charles Petzold]] (November 11, 1998). ''Programming Windows, Fifth Edition''. Microsoft Press. APIs and Memory Models, page 9.</ref>
इन वर्षों में, विंडोज सिस्टम में कई बदलाव और परिवर्धन किए गए, और विंडोज एपीआई इसे बदलने के लिए बदल गया और बढ़ा।<ref name="winapi-changes">''[http://abi-laboratory.pro/index.php?view=winapi Detailed analysis of changes in the Windows API from XP to 10.]'' Retrieved September 08, 2016.</ref> विंडोज 1.0 के लिए विंडोज एपीआई 450 से कम फ़ंक्शन कॉल का समर्थन करता है, जबकि विंडोज एपीआई के आधुनिक संस्करण हजारों का समर्थन करते हैं। हालांकि, सामान्य तौर पर, इंटरफ़ेस काफी सुसंगत रहा, और एक पुराना विंडोज 1.0 एप्लिकेशन अभी भी एक प्रोग्रामर को परिचित लगेगा जो आधुनिक विंडोज एपीआई के लिए उपयोग किया जाता है।<ref name="petzold-9">[[Charles Petzold]] (November 11, 1998). ''Programming Windows, Fifth Edition''. Microsoft Press. APIs and Memory Models, page 9.</ref>


माइक्रोसॉफ्ट ने [[पश्च संगतता]] बनाए रखने का प्रयास किया है। इसे प्राप्त करने के लिए, विंडोज़ के नए संस्करणों को विकसित करते समय, माइक्रोसॉफ्ट ने कभी-कभी वर्कअराउंड<ref>{{cite web |last1=Smith |first1=Graham |title=विंडोज 95 में मूल सिमसीटी में बग को ठीक करने के लिए विशेष कोड था|url=https://www.rockpapershotgun.com/windows-95-had-special-code-just-to-fix-a-bug-in-the-original-simcity |website=Rock, Paper, Shotgun |language=en |date=8 October 2022}}</ref> को तीसरे पक्ष के सॉफ़्टवेयर के साथ संगतता की अनुमति देने के लिए लागू किया था, जो पूर्व संस्करण का उपयोग अनिर्दिष्ट या यहां तक कि अनुचित तरीके से करता था। विंडोज एपीआई पर काम करने वाले एक माइक्रोसॉफ्ट डेवलपर [[रेमंड चेन (माइक्रोसॉफ्ट)|रेमंड चेन]] ने कहा है: "मैं शायद महीनों तक पूरी तरह से खराब चीजों के बारे में लिख सकता हूं जो ऐप्स करते हैं और उन्हें फिर से काम करने के लिए हमें क्या करना था (अक्सर खुद के बावजूद)। यह यही कारण है कि जब लोग माइक्रोसॉफ्ट पर ओएस उन्नयन के दौरान दुर्भावनापूर्ण रूप से अनुप्रयोगों को तोड़ने का आरोप लगाते हैं तो मैं विशेष रूप से क्रोधित हो जाता हूं। अगर कोई भी आवेदन विंडोज 95 पर चलने में विफल रहा, तो मैंने इसे व्यक्तिगत विफलता के रूप में लिया।"<ref name="chen-bozos">[[Raymond Chen (Microsoft)|Raymond Chen]] (October 15, 2003). ''[https://devblogs.microsoft.com/oldnewthing/20031015-00/?p=42163 What about BOZOSLIVEHERE and TABTHETEXTOUTFORWIMPS?]'' Retrieved June 29, 2022.</ref>
माइक्रोसॉफ्ट ने [[पश्च संगतता]] बनाए रखने का प्रयास किया है। इसे प्राप्त करने के लिए, विंडोज़ के नए संस्करणों को विकसित करते समय, माइक्रोसॉफ्ट ने कभी-कभी वर्कअराउंड<ref>{{cite web |last1=Smith |first1=Graham |title=विंडोज 95 में मूल सिमसीटी में बग को ठीक करने के लिए विशेष कोड था|url=https://www.rockpapershotgun.com/windows-95-had-special-code-just-to-fix-a-bug-in-the-original-simcity |website=Rock, Paper, Shotgun |language=en |date=8 October 2022}}</ref> को तीसरे पक्ष के सॉफ़्टवेयर के साथ संगतता की अनुमति देने के लिए लागू किया था, जो पूर्व संस्करण का उपयोग अनिर्दिष्ट या यहां तक कि अनुचित तरीके से करता था। विंडोज एपीआई पर काम करने वाले एक माइक्रोसॉफ्ट डेवलपर [[रेमंड चेन (माइक्रोसॉफ्ट)|रेमंड चेन]] ने कहा है: "मैं शायद महीनों तक पूरी तरह से खराब चीजों के बारे में लिख सकता हूं जो ऐप्स करते हैं और उन्हें फिर से काम करने के लिए हमें क्या करना था (प्रायः खुद के बावजूद)। यह यही कारण है कि जब लोग माइक्रोसॉफ्ट पर ओएस उन्नयन के दौरान दुर्भावनापूर्ण रूप से अनुप्रयोगों को तोड़ने का आरोप लगाते हैं तो मैं विशेष रूप से क्रोधित हो जाता हूं। अगर कोई भी आवेदन विंडोज 95 पर चलने में विफल रहा, तो मैंने इसे व्यक्तिगत विफलता के रूप में लिया।"<ref name="chen-bozos">[[Raymond Chen (Microsoft)|Raymond Chen]] (October 15, 2003). ''[https://devblogs.microsoft.com/oldnewthing/20031015-00/?p=42163 What about BOZOSLIVEHERE and TABTHETEXTOUTFORWIMPS?]'' Retrieved June 29, 2022.</ref>


विंडोज एपीआई में सबसे बड़े परिवर्तनों में से एक विन 16 (विंडोज़ 3.1 और पुराने में शिप किया गया) से विन32 ([[Win32]]) (विंडोज़ एनटी और विंडोज 95 और ऊपर) में परिवर्तन था। जबकि विन32 को मूल रूप से विंडोज एनटी 3.1 (NT3.1) के साथ पेश किया गया था और विन32एस ([[Win32s]]) ने विंडोज 95 से पहले विन32 सबसेट के उपयोग की अनुमति दी थी, यह विंडोज 95 तक नहीं था कि विन32 के लिए अनुप्रयोगों की व्यापक पोर्टिंग शुरू हो गई। संक्रमण को आसान बनाने के लिए, विंडोज 95 में, माइक्रोसॉफ्ट के बाहर और अंदर के डेवलपर्स के लिए, एपीआई थंक्स की जटिल योजना का उपयोग किया गया था जो 32-बिट कोड को 16-बिट कोड (अधिकांश विन16 एपीआई के लिए) और इसके विपरीत कॉल करने की अनुमति दे सकता था। फ्लैट थंक्स ने 32-बिट कोड को 16-बिट पुस्तकालयों में कॉल करने की अनुमति दी, और बैच में पूरे ओएस को विन32 में पोर्ट करने से बचने के लिए इस योजना का उपयोग विंडोज 95 के पुस्तकालयों के अंदर बड़े पैमाने पर किया गया था। विंडोज एनटी में, ओएस शुद्ध 32-बिट था, 16-बिट अनुप्रयोगों के साथ संगतता के लिए भागों को छोड़कर, और विंडोज 95 के लिए विन 16 से विन 32 तक थंक करने के लिए केवल जेनेरिक थंक्स उपलब्ध थे। प्लेटफ़ॉर्म एसडीके कंपाइलर के साथ भेज दिया गया जो कर सकता था इन थैंक्स के लिए आवश्यक कोड तैयार करें। 64-बिट विंडोज़ के संस्करण भी [[वाह64]]  के माध्यम से 32-बिट एप्लिकेशन चलाने में सक्षम हैं। ओएस (OS) ड्राइव पर विंडोज फोल्डर में स्थित सिसवाउ64 फ़ोल्डर में 32-बिट अनुप्रयोगों का समर्थन करने के लिए कई उपकरण हैं।{{Citation needed|date= January 2016}}
विंडोज एपीआई में सबसे बड़े परिवर्तनों में से एक विन 16 (विंडोज़ 3.1 और पुराने में शिप किया गया) से विन32 ([[Win32]]) (विंडोज़ एनटी और विंडोज 95 और ऊपर) में परिवर्तन था। जबकि विन32 को मूल रूप से विंडोज एनटी 3.1 (NT3.1) के साथ पेश किया गया था और विन32एस ([[Win32s]]) ने विंडोज 95 से पहले विन32 सबसेट के उपयोग की अनुमति दी थी, यह विंडोज 95 तक नहीं था कि विन32 के लिए अनुप्रयोगों की व्यापक पोर्टिंग प्रारम्भ हो गई। संक्रमण को आसान बनाने के लिए, विंडोज 95 में, माइक्रोसॉफ्ट के बाहर और अंदर के डेवलपर्स के लिए, एपीआई थंक्स की जटिल योजना का उपयोग किया गया था जो 32-बिट कोड को 16-बिट कोड (अधिकांश विन16 एपीआई के लिए) और इसके विपरीत कॉल करने की अनुमति दे सकता था। फ्लैट थंक्स ने 32-बिट कोड को 16-बिट पुस्तकालयों में कॉल करने की अनुमति दी, और बैच में पूरे ओएस को विन32 में पोर्ट करने से बचने के लिए इस योजना का उपयोग विंडोज 95 के पुस्तकालयों के अंदर बड़े पैमाने पर किया गया था। विंडोज एनटी में, ओएस शुद्ध 32-बिट था, 16-बिट अनुप्रयोगों के साथ संगतता के लिए भागों को छोड़कर, और विंडोज 95 के लिए विन 16 से विन 32 तक थंक करने के लिए केवल जेनेरिक थंक्स उपलब्ध थे। प्लेटफ़ॉर्म एसडीके कंपाइलर के साथ भेज दिया गया जो कर सकता था इन थैंक्स के लिए आवश्यक कोड तैयार करें। 64-बिट विंडोज़ के संस्करण भी [[वाह64|WoW64]]  के माध्यम से 32-बिट एप्लिकेशन चलाने में सक्षम हैं। ओएस (OS) ड्राइव पर विंडोज फोल्डर में स्थित सिसवाउ64 फ़ोल्डर में 32-बिट अनुप्रयोगों का समर्थन करने के लिए कई उपकरण हैं।{{Citation needed|date= January 2016}}
==संस्करण ==
==संस्करण ==
माइक्रोसॉफ्ट विंडोज के लगभग हर नए संस्करण ने विंडोज एपीआई में अपने स्वयं के परिवर्धन और परिवर्तन पेश किए हैं।<ref name="win32faq-history">The Iseran Project (1996–2001). ''[https://web.archive.org/web/20020802081510/http://www.iseran.com/Win32/FAQ/history.html History of the Windows API.]'' Retrieved October 7, 2005.</ref> हालांकि, एपीआई का नाम विंडोज के विभिन्न संस्करणों के बीच एक जैसा बना रहा, और नाम परिवर्तन को विंडोज के लिए प्रमुख आर्किटेक्चरल और प्लेटफॉर्म परिवर्तनों तक सीमित रखा गया। माइक्रोसॉफ्ट ने अंततः तत्कालीन विन 32 एपीआई परिवार का नाम विंडोज एपीआई  में बदल दिया और इसे पिछले और भविष्य के दोनों एपीआई संस्करणों के लिए कैच-ऑल टर्म में बदल दिया।<ref name="msdn-overview2" />
माइक्रोसॉफ्ट विंडोज के लगभग हर नए संस्करण ने विंडोज एपीआई में अपने स्वयं के परिवर्धन और परिवर्तन पेश किए हैं।<ref name="win32faq-history">The Iseran Project (1996–2001). ''[https://web.archive.org/web/20020802081510/http://www.iseran.com/Win32/FAQ/history.html History of the Windows API.]'' Retrieved October 7, 2005.</ref> हालांकि, एपीआई का नाम विंडोज के विभिन्न संस्करणों के बीच एक जैसा बना रहा, और नाम परिवर्तन को विंडोज के लिए प्रमुख आर्किटेक्चरल और प्लेटफॉर्म परिवर्तनों तक सीमित रखा गया। माइक्रोसॉफ्ट ने अंततः तत्कालीन विन 32 एपीआई परिवार का नाम विंडोज एपीआई  में बदल दिया और इसे पिछले और भविष्य के दोनों एपीआई संस्करणों के लिए कैच-ऑल टर्म में बदल दिया।<ref name="msdn-overview2" />


* '''विन16 (Win16)''' माइक्रोसॉफ्ट विंडोज के पहले, [[16-बिट कंप्यूटिंग|16-बिट]] संस्करणों के लिए एपीआई है। इन्हें शुरू में केवल विंडोज एपीआई के रूप में संदर्भित किया गया था, लेकिन बाद में उन्हें विंडोज एपीआई के नए, 32-बिट संस्करण से अलग करने के प्रयास में विन 16 का नाम बदल दिया गया। विन16 API के कार्य मुख्य रूप से OS की कोर फाइलों में रहते हैं: kernel.exe (या krnl286.exe या krnl386.exe), user.exe और gdi.exe। एक्सई के फ़ाइल एक्सटेंशन के बावजूद, ये वास्तव में डायनेमिक-लिंक लाइब्रेरी हैं।
* '''विन16 (Win16)''' माइक्रोसॉफ्ट विंडोज के पहले, [[16-बिट कंप्यूटिंग|16-बिट]] संस्करणों के लिए एपीआई है। इन्हें प्रारम्भ में केवल विंडोज एपीआई के रूप में संदर्भित किया गया था, लेकिन बाद में उन्हें विंडोज एपीआई के नए, 32-बिट संस्करण से अलग करने के प्रयास में विन 16 का नाम बदल दिया गया। विन16 API के कार्य मुख्य रूप से OS की कोर फाइलों में रहते हैं: kernel.exe (या krnl286.exe या krnl386.exe), user.exe और gdi.exe। एक्सई के फ़ाइल एक्सटेंशन के बावजूद, ये वास्तव में डायनेमिक-लिंक लाइब्रेरी हैं।
*'''Win32''' विंडोज के [[32-बिट कंप्यूटिंग|32-बिट]] संस्करणों (NT, 95, और बाद के संस्करणों) के लिए 32-बिट एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस (API) है। एपीआई में सिस्टम डीएलएल में विन 16 के साथ लागू किए गए कार्य होते हैं। Win32 के मूल DLL हैं- kernel32.dll, user32.dll और gdi32.dll। विन32 को विंडोज एनटी के साथ पेश किया गया था। विंडोज 95 के साथ शिप किए गए Win32 के संस्करण को शुरू में Win32c के रूप में संदर्भित किया गया था, जिसमें c अर्थ अनुकूलता थी। इस शब्द को बाद में Microsoft ने Win32 के पक्ष में छोड़ दिया।
*'''Win32''' विंडोज के [[32-बिट कंप्यूटिंग|32-बिट]] संस्करणों (NT, 95, और बाद के संस्करणों) के लिए 32-बिट एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस (API) है। एपीआई में सिस्टम डीएलएल में विन 16 के साथ लागू किए गए कार्य होते हैं। Win32 के मूल DLL हैं- kernel32.dll, user32.dll और gdi32.dll। विन32 को विंडोज एनटी के साथ पेश किया गया था। विंडोज 95 के साथ शिप किए गए Win32 के संस्करण को प्रारम्भ में Win32c के रूप में संदर्भित किया गया था, जिसमें c अर्थ अनुकूलता थी। इस शब्द को बाद में Microsoft ने Win32 के पक्ष में छोड़ दिया।
*'''Win32s''' माइक्रोसॉफ्ट विंडोज के विंडोज 3.1x के Windows 3.1x परिवार के लिए एक विस्तार है जिसने इन प्रणालियों के लिए Win32 API का सबसेट लागू किया है। "एस" "[[सबसेट]]" के लिए खड़ा है।
*'''Win32s''' माइक्रोसॉफ्ट विंडोज के विंडोज 3.1x के Windows 3.1x परिवार के लिए एक विस्तार है जिसने इन प्रणालियों के लिए Win32 API का सबसेट लागू किया है। "एस" "[[सबसेट]]" के लिए खड़ा है।
*'''Win64''' विंडोज आर्किटेक्चर के '''64-बिट''' प्लेटफॉर्म पर लागू एपीआई का संस्करण है (2021 तक, [[x86-64]] और [[AArch64]])।{{efn|Nomenclature of released 64-bit versions includes [[Windows XP Professional x64 Edition]] and x64 Editions of Windows Server 2003, Windows Vista and Windows Server 2008 on the x86-64 (AMD64) platform, and [[Windows 2000]] Server Limited Edition, [[Windows XP 64-bit Edition]], Windows Advanced Server 2003 for [[Itanium]] and Windows 2008 Advanced Server for [[Itanium]] on the [[IA-64]] platform.}}<ref name="XPx64">{{cite web |url=http://www.microsoft.com/windowsxp/64bit/ |title=Windows XP Professional x64 संस्करण होम पेज|publisher=Microsoft}}</ref><ref name="2003x64">{{cite web |url=http://www.microsoft.com/servers/64bit/ |title=Microsoft 64-बिट कम्प्यूटिंग अवलोकन|publisher=Microsoft}}</ref> एक आवेदन के 32-बिट और 64-बिट संस्करण दोनों अभी भी एक कोडबेस से संकलित किया जा सकता है, हालांकि कुछ पुराने एपीआई को पदावनत कर दिया गया है, और कुछ एपीआई जो पहले से ही Win32 में पदावनत थे, को हटा दिया गया था। डिफ़ॉल्ट रूप से सभी मेमोरी पॉइंटर्स 64-बिट होते हैं ([[एलएलपी64]] मॉडल), इसलिए 64-बिट पॉइंटर अंकगणित के साथ संगतता के लिए स्रोत कोड की जांच की जानी चाहिए और आवश्यकतानुसार फिर से लिखा जाना चाहिए। [24]
*'''Win64''' विंडोज आर्किटेक्चर के '''64-बिट''' प्लेटफॉर्म पर लागू एपीआई का संस्करण है (2021 तक, [[x86-64]] और [[AArch64]])।{{efn|Nomenclature of released 64-bit versions includes [[Windows XP Professional x64 Edition]] and x64 Editions of Windows Server 2003, Windows Vista and Windows Server 2008 on the x86-64 (AMD64) platform, and [[Windows 2000]] Server Limited Edition, [[Windows XP 64-bit Edition]], Windows Advanced Server 2003 for [[Itanium]] and Windows 2008 Advanced Server for [[Itanium]] on the [[IA-64]] platform.}}<ref name="XPx64">{{cite web |url=http://www.microsoft.com/windowsxp/64bit/ |title=Windows XP Professional x64 संस्करण होम पेज|publisher=Microsoft}}</ref><ref name="2003x64">{{cite web |url=http://www.microsoft.com/servers/64bit/ |title=Microsoft 64-बिट कम्प्यूटिंग अवलोकन|publisher=Microsoft}}</ref> एक आवेदन के 32-बिट और 64-बिट संस्करण दोनों अभी भी एक कोडबेस से संकलित किया जा सकता है, हालांकि कुछ पुराने एपीआई को पदावनत कर दिया गया है, और कुछ एपीआई जो पहले से ही Win32 में पदावनत थे, को हटा दिया गया था। डिफ़ॉल्ट रूप से सभी मेमोरी पॉइंटर्स 64-बिट होते हैं ([[एलएलपी64]] मॉडल), इसलिए 64-बिट पॉइंटर अंकगणित के साथ संगतता के लिए स्रोत कोड की जांच की जानी चाहिए और आवश्यकतानुसार फिर से लिखा जाना चाहिए। [24]
Line 94: Line 94:
विंडोज एपीआई  का उपयोग करने वाले सॉफ़्टवेयर को विकसित करने के लिए, कंपाइलर को ऊपर सूचीबद्ध माइक्रोसॉफ्ट-विशिष्ट डीएलएल का उपयोग करने में सक्षम होना चाहिए (कॉम-ऑब्जेक्ट्स Win32 के बाहर हैं और निश्चित विटेबल लेआउट मान लेते हैं)। कंपाइलर को या तो हेडर फाइलों को हैंडल करना चाहिए जो आंतरिक एपीआई फ़ंक्शन नामों को उजागर करता है या ऐसी फाइलों की आपूर्ति करता है।
विंडोज एपीआई  का उपयोग करने वाले सॉफ़्टवेयर को विकसित करने के लिए, कंपाइलर को ऊपर सूचीबद्ध माइक्रोसॉफ्ट-विशिष्ट डीएलएल का उपयोग करने में सक्षम होना चाहिए (कॉम-ऑब्जेक्ट्स Win32 के बाहर हैं और निश्चित विटेबल लेआउट मान लेते हैं)। कंपाइलर को या तो हेडर फाइलों को हैंडल करना चाहिए जो आंतरिक एपीआई फ़ंक्शन नामों को उजागर करता है या ऐसी फाइलों की आपूर्ति करता है।


C++ भाषा के लिए, ज़ोर्टेक (बाद में सिमेंटेक, फिर डिजिटल मार्स), वाटकॉम और [[बोरलैंड]] ने सभी प्रसिद्ध व्यावसायिक कंपाइलरों का उत्पादन किया है जिनका अक्सर Win16, Win32s और Win32 के साथ उपयोग किया जाता है। उनमें से कुछ ने मेमोरी एक्सटेंडर की आपूर्ति की, जिससे Win32 प्रोग्राम Microsoft के पुनर्वितरण योग्य Win32s DLL के साथ Win16 पर चल सके। Microsoft के पास C++ कंपाइलर होने से पहले ज़ोरटेक कंपाइलर विंडोज प्रोग्रामिंग के लिए शायद पहले स्थिर और प्रयोग करने योग्य C++ कंपाइलरों में से एक था।
C++ भाषा के लिए, ज़ोर्टेक (बाद में सिमेंटेक, फिर डिजिटल मार्स), वाटकॉम और [[बोरलैंड]] ने सभी प्रसिद्ध व्यावसायिक कंपाइलरों का उत्पादन किया है जिनका प्रायः Win16, Win32s और Win32 के साथ उपयोग किया जाता है। उनमें से कुछ ने मेमोरी एक्सटेंडर की आपूर्ति की, जिससे Win32 प्रोग्राम Microsoft के पुनर्वितरण योग्य Win32s DLL के साथ Win16 पर चल सके। Microsoft के पास C++ कंपाइलर होने से पहले ज़ोरटेक कंपाइलर विंडोज प्रोग्रामिंग के लिए शायद पहले स्थिर और प्रयोग करने योग्य C++ कंपाइलरों में से एक था।


अनुप्रयोगों के कुछ वर्गों के लिए, कंपाइलर सिस्टम को [[इंटरफ़ेस विवरण भाषा]] (आईडीएल) फ़ाइलों को संभालने में भी सक्षम होना चाहिए। सामूहिक रूप से, ये पूर्वापेक्षाएँ (संकलक, उपकरण, पुस्तकालय और शीर्षलेख) माइक्रोसॉफ्ट प्लेटफ़ॉर्म एसडीके के रूप में जानी जाती हैं। एक समय के लिए, माइक्रोसॉफ्ट [[विजुअल स्टूडियो]] और बोरलैंड की एकीकृत विकास प्रणाली एकमात्र एकीकृत विकास वातावरण (आईडीईस) थी जो इसे प्रदान कर सकती थी (हालाँकि, एसडीके पूरे आईडीई सूट से अलग से डाउनलोड करने योग्य है,माइक्रोसॉफ्ट विंडोज एसडीके से विंडोज़ 7 और .NET फ्रेमवर्क 4) ( [http://www. microsoft.com/download/en/details.aspx?displaylang=en&id=8279 विंडोज 7 और .NET फ्रेमवर्क 4 के लिए माइक्रोसॉफ्ट विंडोज एसडीके])।।
अनुप्रयोगों के कुछ वर्गों के लिए, कंपाइलर सिस्टम को [[इंटरफ़ेस विवरण भाषा]] (आईडीएल) फ़ाइलों को संभालने में भी सक्षम होना चाहिए। सामूहिक रूप से, ये पूर्वापेक्षाएँ (संकलक, उपकरण, पुस्तकालय और शीर्षलेख) माइक्रोसॉफ्ट प्लेटफ़ॉर्म एसडीके के रूप में जानी जाती हैं। एक समय के लिए, माइक्रोसॉफ्ट [[विजुअल स्टूडियो]] और बोरलैंड की एकीकृत विकास प्रणाली एकमात्र एकीकृत विकास वातावरण (आईडीईस) थी जो इसे प्रदान कर सकती थी (हालाँकि, एसडीके पूरे आईडीई सूट से अलग से डाउनलोड करने योग्य है,माइक्रोसॉफ्ट विंडोज एसडीके से विंडोज़ 7 और .NET फ्रेमवर्क 4) ( [http://www. microsoft.com/download/en/details.aspx?displaylang=en&id=8279 विंडोज 7 और .NET फ्रेमवर्क 4 के लिए माइक्रोसॉफ्ट विंडोज एसडीके])।।

Revision as of 12:34, 30 December 2022

विंडोज एपीआई, अनौपचारिक रूप से विनएपीआई, माइक्रोसॉफ़्ट विंडोज़ ऑपरेटिंग सिस्टम में उपलब्ध एप्लिकेशन प्रोग्रामिंग इंटरफेस (एपीआई) का माइक्रोसॉफ्ट का कोर सेट है। विंडोज एपीआई, नाम सामूहिक रूप से कई अलग-अलग प्लेटफ़ॉर्म कार्यान्वयनों को संदर्भित करता है जिन्हें प्रायः अपने स्वयं के नामों से संदर्भित किया जाता है (उदाहरण के लिए, विन 32 एपीआई); संस्करण अनुभाग देखें। लगभग सभी विंडोज प्रोग्राम विंडोज एपीआई के साथ इंटरैक्ट करते हैं। ऑपरेटिंग सिस्टम की विंडोज एनटी लाइन पर, एक छोटी संख्या (जैसे कि विंडोज स्टार्टअप प्रक्रिया के प्रारम्भ में प्रारम्भ होने वाले प्रोग्राम) नेटिव एपीआई का उपयोग करते हैं।[1]

डेवलपर समर्थन सॉफ़्टवेयर डेवलपमेंट किट, माइक्रोसॉफ्ट विंडोज एसडीके (Microsoft Windows SDK) के रूप में उपलब्ध है, जो विंडोज एपीआई और संबद्ध विंडोज इंटरफ़ेस पर आधारित सॉफ़्टवेयर बनाने के लिए आवश्यक दस्तावेज़ और टूल प्रदान करता है।

विंडोज एपीआई (विन32) मुख्य रूप से प्रोग्रामिंग भाषा सी (C) पर केंद्रित है[2], जिसमें इसके खुला कार्यों और डेटा संरचनाओं को इसके प्रलेखन के हाल के संस्करणों में उस भाषा में वर्णित किया गया है। हालांकि, एपीआई का उपयोग किसी भी प्रोग्रामिंग लैंग्वेज कंपाइलर या असेंबलर द्वारा किया जा सकता है जो कॉल और कॉलबैक के लिए निर्धारित कॉलिंग कन्वेंशन के साथ (अच्छी तरह से परिभाषित) निम्न-स्तरीय डेटा संरचनाओं को संभालने में सक्षम है। इसी तरह, एपीआई के कार्य के आंतरिक कार्यान्वयन को ऐतिहासिक रूप से कई भाषाओं में विकसित किया गया है। [इस तथ्य के बावजूद कि सी ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषा नहीं है, विंडोज एपीआई और विंडोज दोनों को ऐतिहासिक रूप से ऑब्जेक्ट-ओरिएंटेड के रूप में वर्णित किया गया है। ऑब्जेक्ट-ओरिएंटेड भाषाओं के लिए कई रैपर क्लासेस और एक्सटेंशन (माइक्रोसॉफ्ट और अन्य से) भी हैं जो इस ऑब्जेक्ट-ओरिएंटेड स्ट्रक्चर (वस्तु उन्मुख कार्यकर्म) को अधिक स्पष्ट (माइक्रोसॉफ्ट फाउंडेशन क्लास लाइब्रेरी (एमएफसी), विजुअल कंपोनेंट लाइब्रेरी (वीसीएल), जीडीआई+, आदि) बनाते हैं। उदाहरण के लिए, विंडोज 8 विंडोज एपीआई और विनआरटी एपीआई प्रदान करता है, जो सी ++ (C++)[3] में लागू किया गया है और डिजाइन द्वारा ऑब्जेक्ट-ओरिएंटेड है।[3]

अवलोकन

विंडोज एपीआई द्वारा प्रदान किए गए कार्यों को आठ श्रेणियों में बांटा जा सकता है:[4]

बेस सर्विसेज
[5] विंडोज सिस्टम के लिए उपलब्ध मूलभूत संसाधनों तक पहुंच प्रदान करें। इसमें फाइल सिस्टम, डिवाइस, प्रोसेस, थ्रेड्स और एरर हैंडलिंग जैसी चीजें सम्मिलित हैं। ये कार्य 16-बिट विंडोज़ पर kernel.exe, krnl286.exe या krnl386.exe फ़ाइलों में रहते हैं, और 32 और 64 बिट विंडोज़ पर kernel32.dll और KernelBase.dll में रहते हैं। ये फ़ाइलें Windows के सभी संस्करणों पर \Windows\System32 फ़ोल्डर में रहती हैं।
उन्नत सेवाएं
कर्नेल से परे कार्यों तक पहुंच प्रदान करें। विंडोज रजिस्ट्री, शटडाउन/सिस्टम को फिर से प्रारम्भ करना (या निरस्त करना), विंडोज़ सेवा प्रारम्भ/रोकना/बनाना और उपयोगकर्ता खातों को प्रबंधित करने जैसी चीजें सम्मिलित हैं। ये कार्य 32-बिट विंडोज पर advapi32.dll और advapires32.dll में रहते हैं।
ग्राफिक्स डिवाइस इंटरफ़ेस
[6] मॉनिटर, प्रिंटर और अन्य आउटपुट डिवाइस के लिए ग्राफिक्स कंटेंट को आउटपुट करने के लिए फ़ंक्शन प्रदान करता है। यह उपयोगकर्ता मोड में 16-बिट विंडोज़ पर gdi.exe और 32-बिट विंडोज़ पर gdi32.dll में रहता है। कर्नेल-मोड GDI समर्थन win32k.sys द्वारा प्रदान किया जाता है जो सीधे ग्राफिक्स ड्राइवर के साथ संचार करता है।[7]
यूजर इंटरफेस
[8] स्क्रीन विंडो बनाने और प्रबंधित करने के लिए फ़ंक्शन प्रदान करता है और अधिकांश बुनियादी नियंत्रण, जैसे बटन और क्रॉलबार, माउस और कीबोर्ड इनपुट प्राप्त करते हैं, और विंडोज़ के ग्राफिकल यूज़र इंटरफ़ेस (जीयूआई) भाग से जुड़े अन्य फ़ंक्शन प्रदान करता है। यह कार्यात्मक इकाई 16-बिट विंडोज़ पर user.exe और 32-बिट विंडोज़ पर user32.dll में स्थित है। विंडोज एक्सपी (Windows XP) संस्करणों के बाद से, सामान्य नियंत्रण (सामान्य नियंत्रण लाइब्रेरी) के साथ, मूल नियंत्रण comctl32.dll में रहते हैं।
कॉमन डायलॉग बॉक्स लाइब्रेरी
[9] फ़ाइलों को खोलने और सहेजने, रंग और फ़ॉन्ट चुनने आदि के लिए मानक डायलॉग बॉक्स के साथ एप्लिकेशन प्रदान करता है। पुस्तकालय 16-बिट विंडोज़ पर commdlg.dll नामक फ़ाइल में रहता है, और 32-बिट विंडोज़ पर comdlg32.dll। इसे एपीआई के यूजर इंटरफेस श्रेणी के तहत समूहीकृत किया गया है।
कॉमन कंट्रोल लाइब्रेरी
[10] एप्लिकेशन को ऑपरेटिंग सिस्टम द्वारा उपलब्ध कराए गए कुछ उन्नत नियंत्रणों तक पहुंच देता है। इनमें स्टेटस बार, प्रोगेस बार, टूलबार और टैब जैसी चीज़ें सम्मिलित होती हैं. लाइब्रेरी 16-बिट विंडोज पर commctrl.dll और 32-बिट विंडोज पर comctl32.dll नामक डायनेमिक-लिंक लाइब्रेरी (DLL) फ़ाइल में स्थित है। यह एपीआई की यूजर इंटरफेस श्रेणी के तहत समूहीकृत है।
विंडोज़ शैल
[11][12] विंडोज एपीआई का घटक एप्लिकेशन को ऑपरेटिंग सिस्टम शेल द्वारा प्रदान किए गए कार्यों तक पहुंचने और उन्हें बदलने और बढ़ाने की अनुमति देता है। घटक 16-बिट विंडोज़ पर shell.dll और 32-बिट विंडोज़ पर shell32.dll में रहता है। शेल लाइटवेट यूटिलिटी फ़ंक्शंस shlwapi.dll में हैं। यह एपीआई की यूजर इंटरफेस श्रेणी के तहत समूहीकृत है।
नेटवर्क सर्विसेज
[13] ऑपरेटिंग सिस्टम की विभिन्न नेटवर्किंग क्षमताओं तक पहुंच दें। इसके उप-घटकों में नेटबीआईओएस (NetBIOS), विनसॉक (Winsock), नेटडीडीई, दूरस्थ प्रक्रिया कॉल (आरपीसी) और बहुत कुछ सम्मिलित हैं। यह घटक 32-बिट विंडोज पर netapi32.dll में स्थित है।

वेब

इंटरनेट एक्स्प्लोरर (आईई) वेब ब्राउजर भी कई एपीआई को अनावृत करता है जो प्रायः अनुप्रयोगों द्वारा उपयोग किया जाता है, और इस तरह इसे विंडोज एपीआई का एक हिस्सा माना जा सकता है। आईई को विंडोज 95 ओएसआर2 के बाद से ऑपरेटिंग सिस्टम के साथ सम्मिलित किया गया है और विंडोज 98 के बाद से अनुप्रयोगों के लिए वेब-संबंधित सेवाएं प्रदान की गई हैं।[14] विशेष रूप से, यह प्रदान करने के लिए प्रयोग किया जाता है:

  • एम्बेड करने योग्य वेब ब्राउज़र नियंत्रण, shdocvw.dll और mshtml.dll में समाहित है।
  • urlmon.dll में आयोजित URL मोनिकर सेवा, जो URL को हल करने के लिए एप्लिकेशन को कॉम (COM) ऑब्जेक्ट प्रदान करती है। एप्लिकेशन अन्य लोगों द्वारा उपयोग किए जाने के लिए अपने स्वयं के URL हैंडलर भी प्रदान कर सकते हैं।
  • एचटीटीपी क्लाइंट लाइब्रेरी जो सिस्टम-वाइड प्रॉक्सी सेटिंग्स (wininet.dll) को भी ध्यान में रखती है; हालाँकि, Microsoft ने winhttp.dll नामक एक अन्य HTTP क्लाइंट लाइब्रेरी को जोड़ा है जो कुछ अनुप्रयोगों के लिए छोटा और अधिक उपयुक्त है।
  • बहु-भाषा और अंतर्राष्ट्रीय पाठ समर्थन (mlang.dll) के साथ सहायता करने के लिए पुस्तकालय।
  • डायरेक्टएक्स ट्रांसफ़ॉर्म, इमेज फ़िल्टर घटकों का एक सेट।
  • XML समर्थन (एमएसएक्सएमएल घटक, msxml*.dll में रखा गया है)।
  • विंडोज एड्रेस बुक्स तक पहुंच।

मल्टीमीडिया

क्लासिक विंडोज मल्टीमीडिया एपीआई को winmm.dll में रखा गया है और इसमें ध्वनि फ़ाइलों को चलाने, मिडी संदेश भेजने और प्राप्त करने, जॉयस्टिक्स तक पहुंचने और विंडोज के तथाकथित एमसीआई सबसिस्टम की अन्य सभी सुविधाओं को सुविधाजनक बनाने के लिए कार्य सम्मिलित हैं, जो उपलब्ध मल्टीमीडिया एक्सटेंशन से उत्पन्न होता है। विंडोज 3.0 के लिए अलग से और विंडोज 3.1 के बाद से ऑपरेटिंग सिस्टम के अभिन्न अंग के रूप में, जिस समय वे mmsystem.dll में स्थित थे।

इसके अलावा, विंडोज 95 OSR2 के बाद से प्रत्येक विंडोज संस्करण के हिस्से के रूप में, माइक्रोसॉफ्ट ने डायरेक्टएक्स एपीआई प्रदान किया है - ग्राफिक्स और गेमिंग सेवाओं का एक शिथिल संबंधित सेट, जिसमें सम्मिलित हैं:

  • Direct2D हार्डवेयर-त्वरित 2D वेक्टर ग्राफिक्स के लिए।
  • Direct3D हार्डवेयर-त्वरित 3D ग्राफ़िक्स के लिए।
  • निम्न-स्तरीय हार्डवेयर-त्वरित साउंड कार्ड एक्सेस के लिए डायरेक्टसाउंड।
  • जॉयस्टिक और गेमपैड जैसे इनपुट उपकरणों के साथ संचार के लिए डायरेक्ट इनपुट (DirectInput)।
  • डायरेक्टप्ले एक मल्टीप्लेयर गेमिंग इंफ्रास्ट्रक्चर है। इस घटक को डायरेक्टएक्स 9 के रूप में बहिष्कृत कर दिया गया है, और Microsoft अब गेम के विकास के लिए इसके उपयोग की अनुशंसा नहीं करता है।
  • पहले के डायरेक्टएक्स संस्करणों में 2D ग्राफ़िक्स के लिए डायरेक्टड्रा (DirectDraw) को अब हटा दिया गया है और Direct2D के साथ बदल दिया गया है।
  • विंडोज़ 3.एक्स संस्करणों के लिए लिखे गए 16-बिट गेम में 2D ग्राफ़िक्स के लिए विनजी (WinG)। विंडोज 95 रिलीज के साथ पदावनत।

मीडिया एन्कोडिंग और प्लेबैक के लिए माइक्रोसॉफ्ट कई एपीआई भी प्रदान करता है:

  • डायरेक्टशो, जो सामान्य मल्टीमीडिया पाइपलाइनों का निर्माण और संचालन करता है। यह जी स्ट्रीमर (जी स्ट्रीमर) फ्रेमवर्क के बराबर है और प्रायः इन-गेम वीडियो रेंडर करने और मीडिया प्लेयर बनाने के लिए उपयोग किया जाता है (विंडोज़ मीडिया प्लेयर इस पर आधारित है)। गेम डेवलपमेंट के लिए अब डायरेक्टशो की अनुशंसा नहीं की जाती है।
  • मीडिया फाउंडेशन, नया डिजिटल मीडिया एपीआई, जो डायरेक्टशो को बदलने का इरादा रखता है।

प्रोग्राम इंटरेक्शन

विंडोज एपीआई को ज्यादातर ऑपरेटिंग सिस्टम और एप्लिकेशन के बीच बातचीत के लिए डिज़ाइन किया गया है। विभिन्न विंडोज अनुप्रयोगों के बीच संचार के लिए, माइक्रोसॉफ्ट ने मुख्य विंडोज एपीआई के साथ-साथ कई तकनीकों का विकास किया है। यह डायनेमिक डेटा एक्सचेंज (डीडीई) के साथ प्रारम्भ हुआ, जिसे ऑब्जेक्ट लिंकिंग एंड एंबेडिंग (ओएलई) और बाद में कंपोनेंट ऑब्जेक्ट मॉडल (COM), ऑटोमेशन ऑब्जेक्ट्स, एक्टिवेक्स कंट्रोल्स और .NET फ्रेमवर्क द्वारा अधिक्रमित किया गया था। इन तकनीकों के बीच हमेशा स्पष्ट अंतर नहीं होता है, और बहुत कुछ ओवरलैप होता है।

शब्दों की विविधता मूल रूप से सॉफ्टवेयर तंत्र के समूहीकरण का परिणाम है जो सॉफ्टवेयर विकास के दिए गए पहलू से संबंधित है। स्वचालन विशेष रूप से एप्लिकेशन या घटक (एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस (एपीआई) के रूप में) के कार्य को निर्यात करने से संबंधित है ताकि इसे केवल मानव उपयोगकर्ताओं के बजाय अन्य अनुप्रयोगों द्वारा नियंत्रित किया जा सके। विभिन्न प्रकार के जस्ट-इन-टाइम (JIT) संकलित भाषाओं में लिखित डेस्कटॉप और वेब एप्लिकेशन विकसित करें।

Windows.pas पास्कल/डेल्फी इकाई है जिसमें विंडोज-विशिष्ट एपीआई घोषणाएं सम्मिलित हैं। यह windows.h का पास्कल समतुल्य है, जिसका उपयोग सी में किया जाता है।[15]

रैपर लाइब्रेरी

माइक्रोसॉफ्ट द्वारा विभिन्न रैपर विकसित किए गए थे जिन्होंने विंडोज़ एपीआई के कुछ और निम्न-स्तरीय कार्यों को संभाला और अनुप्रयोगों को एपीआई के साथ अधिक अमूर्त तरीके से बातचीत करने की अनुमति दी। माइक्रोसॉफ्ट फाउंडेशन क्लास लाइब्रेरी (एमएफसी) ने विंडोज एपीआई कार्यक्षमता को सी ++ कक्षाओं में लपेटा है, और इस प्रकार एपीआई के साथ बातचीत करने के लिए अधिक ऑब्जेक्ट-ओरिएंटेड तरीके की अनुमति देता है। सक्रिय टेम्पलेट लाइब्रेरी (एटीएल) कॉम के लिए टेम्पलेट-ओरिएंटेड रैपर है। विंडोज टेम्पलेट लाइब्रेरी (डब्ल्यूटीएल) को एटीएल के विस्तार के रूप में विकसित किया गया था और एमएफसी के छोटे विकल्प के रूप में इसका उद्देश्य था।

विंडोज के लिए अधिकांश एप्लिकेशन फ्रेमवर्क (कम से कम आंशिक रूप से) विंडोज एपीआई को लपेटते हैं। इस प्रकार, .NET फ्रेमवर्क और जावा, इसी तरह विंडोज के तहत कोई भी अन्य प्रोग्रामिंग लैंग्वेज, रैपर लाइब्रेरी हैं (या सम्मिलित हैं)।

इतिहास

विंडोज एपीआई (Windows API) ने हमेशा विंडोज सिस्टम की अंतर्निहित संरचना के एक बड़े हिस्से को प्रोग्रामरों के सामने उजागर किया है। इससे उन्हें अपने अनुप्रयोगों पर अधिक लचीलापन और शक्ति देने का लाभ मिला, लेकिन यह भी बड़ी जिम्मेदारी पैदा करता है कि कैसे एप्लिकेशन विभिन्न निम्न-स्तर, कभी-कभी थकाऊ, संचालन को संभालते हैं जो एक ग्राफिकल यूजर इंटरफेस से जुड़े होते हैं।

उदाहरण के लिए, शुरुआती सी प्रोग्रामर प्रायः अपने पहले असाइनमेंट के रूप में सरल "हैलो वर्ल्ड" लिखेंगे। मुख्य उपनेमका के भीतर कार्यक्रम का कामकाजी हिस्सा केवल प्रिंटएफ लाइन है। मानक I/O लाइब्रेरी से लिंक करने का ओवरहेड भी केवल लाइन है:

#include <stdio.h>

int main(void) {
    printf("Hello, World!\n");
}

विंडोज संस्करण अभी भी कोड की केवल एक कामकाजी लाइन थी लेकिन इसके लिए ओवरहेड की कई और अधिक लाइनों की आवश्यकता थी। विंडोज एपीआई के लिए प्रोग्रामिंग के बारे में कई किताबें लिखने वाले चार्ल्स पेटज़ोल्ड ने कहा: "विंडोज 1.0 एसडीके में मूल हैलो वर्ल्ड प्रोग्राम थोड़ा सा स्कैंडल था। HELLO.C लगभग 150 लाइन लंबी थी, और HELLO.RC संसाधन स्क्रिप्ट और 20 या उससे अधिक पंक्तियाँ थीं। (...) अनुभवी प्रोग्रामर प्रायः विंडोज हैलो-वर्ल्ड प्रोग्राम का सामना करते समय डरावनी या हँसी में डूब जाते थे।"[16]

इन वर्षों में, विंडोज सिस्टम में कई बदलाव और परिवर्धन किए गए, और विंडोज एपीआई इसे बदलने के लिए बदल गया और बढ़ा।[17] विंडोज 1.0 के लिए विंडोज एपीआई 450 से कम फ़ंक्शन कॉल का समर्थन करता है, जबकि विंडोज एपीआई के आधुनिक संस्करण हजारों का समर्थन करते हैं। हालांकि, सामान्य तौर पर, इंटरफ़ेस काफी सुसंगत रहा, और एक पुराना विंडोज 1.0 एप्लिकेशन अभी भी एक प्रोग्रामर को परिचित लगेगा जो आधुनिक विंडोज एपीआई के लिए उपयोग किया जाता है।[18]

माइक्रोसॉफ्ट ने पश्च संगतता बनाए रखने का प्रयास किया है। इसे प्राप्त करने के लिए, विंडोज़ के नए संस्करणों को विकसित करते समय, माइक्रोसॉफ्ट ने कभी-कभी वर्कअराउंड[19] को तीसरे पक्ष के सॉफ़्टवेयर के साथ संगतता की अनुमति देने के लिए लागू किया था, जो पूर्व संस्करण का उपयोग अनिर्दिष्ट या यहां तक कि अनुचित तरीके से करता था। विंडोज एपीआई पर काम करने वाले एक माइक्रोसॉफ्ट डेवलपर रेमंड चेन ने कहा है: "मैं शायद महीनों तक पूरी तरह से खराब चीजों के बारे में लिख सकता हूं जो ऐप्स करते हैं और उन्हें फिर से काम करने के लिए हमें क्या करना था (प्रायः खुद के बावजूद)। यह यही कारण है कि जब लोग माइक्रोसॉफ्ट पर ओएस उन्नयन के दौरान दुर्भावनापूर्ण रूप से अनुप्रयोगों को तोड़ने का आरोप लगाते हैं तो मैं विशेष रूप से क्रोधित हो जाता हूं। अगर कोई भी आवेदन विंडोज 95 पर चलने में विफल रहा, तो मैंने इसे व्यक्तिगत विफलता के रूप में लिया।"[20]

विंडोज एपीआई में सबसे बड़े परिवर्तनों में से एक विन 16 (विंडोज़ 3.1 और पुराने में शिप किया गया) से विन32 (Win32) (विंडोज़ एनटी और विंडोज 95 और ऊपर) में परिवर्तन था। जबकि विन32 को मूल रूप से विंडोज एनटी 3.1 (NT3.1) के साथ पेश किया गया था और विन32एस (Win32s) ने विंडोज 95 से पहले विन32 सबसेट के उपयोग की अनुमति दी थी, यह विंडोज 95 तक नहीं था कि विन32 के लिए अनुप्रयोगों की व्यापक पोर्टिंग प्रारम्भ हो गई। संक्रमण को आसान बनाने के लिए, विंडोज 95 में, माइक्रोसॉफ्ट के बाहर और अंदर के डेवलपर्स के लिए, एपीआई थंक्स की जटिल योजना का उपयोग किया गया था जो 32-बिट कोड को 16-बिट कोड (अधिकांश विन16 एपीआई के लिए) और इसके विपरीत कॉल करने की अनुमति दे सकता था। फ्लैट थंक्स ने 32-बिट कोड को 16-बिट पुस्तकालयों में कॉल करने की अनुमति दी, और बैच में पूरे ओएस को विन32 में पोर्ट करने से बचने के लिए इस योजना का उपयोग विंडोज 95 के पुस्तकालयों के अंदर बड़े पैमाने पर किया गया था। विंडोज एनटी में, ओएस शुद्ध 32-बिट था, 16-बिट अनुप्रयोगों के साथ संगतता के लिए भागों को छोड़कर, और विंडोज 95 के लिए विन 16 से विन 32 तक थंक करने के लिए केवल जेनेरिक थंक्स उपलब्ध थे। प्लेटफ़ॉर्म एसडीके कंपाइलर के साथ भेज दिया गया जो कर सकता था इन थैंक्स के लिए आवश्यक कोड तैयार करें। 64-बिट विंडोज़ के संस्करण भी WoW64 के माध्यम से 32-बिट एप्लिकेशन चलाने में सक्षम हैं। ओएस (OS) ड्राइव पर विंडोज फोल्डर में स्थित सिसवाउ64 फ़ोल्डर में 32-बिट अनुप्रयोगों का समर्थन करने के लिए कई उपकरण हैं।[citation needed]

संस्करण

माइक्रोसॉफ्ट विंडोज के लगभग हर नए संस्करण ने विंडोज एपीआई में अपने स्वयं के परिवर्धन और परिवर्तन पेश किए हैं।[21] हालांकि, एपीआई का नाम विंडोज के विभिन्न संस्करणों के बीच एक जैसा बना रहा, और नाम परिवर्तन को विंडोज के लिए प्रमुख आर्किटेक्चरल और प्लेटफॉर्म परिवर्तनों तक सीमित रखा गया। माइक्रोसॉफ्ट ने अंततः तत्कालीन विन 32 एपीआई परिवार का नाम विंडोज एपीआई  में बदल दिया और इसे पिछले और भविष्य के दोनों एपीआई संस्करणों के लिए कैच-ऑल टर्म में बदल दिया।[4]

  • विन16 (Win16) माइक्रोसॉफ्ट विंडोज के पहले, 16-बिट संस्करणों के लिए एपीआई है। इन्हें प्रारम्भ में केवल विंडोज एपीआई के रूप में संदर्भित किया गया था, लेकिन बाद में उन्हें विंडोज एपीआई के नए, 32-बिट संस्करण से अलग करने के प्रयास में विन 16 का नाम बदल दिया गया। विन16 API के कार्य मुख्य रूप से OS की कोर फाइलों में रहते हैं: kernel.exe (या krnl286.exe या krnl386.exe), user.exe और gdi.exe। एक्सई के फ़ाइल एक्सटेंशन के बावजूद, ये वास्तव में डायनेमिक-लिंक लाइब्रेरी हैं।
  • Win32 विंडोज के 32-बिट संस्करणों (NT, 95, और बाद के संस्करणों) के लिए 32-बिट एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस (API) है। एपीआई में सिस्टम डीएलएल में विन 16 के साथ लागू किए गए कार्य होते हैं। Win32 के मूल DLL हैं- kernel32.dll, user32.dll और gdi32.dll। विन32 को विंडोज एनटी के साथ पेश किया गया था। विंडोज 95 के साथ शिप किए गए Win32 के संस्करण को प्रारम्भ में Win32c के रूप में संदर्भित किया गया था, जिसमें c अर्थ अनुकूलता थी। इस शब्द को बाद में Microsoft ने Win32 के पक्ष में छोड़ दिया।
  • Win32s माइक्रोसॉफ्ट विंडोज के विंडोज 3.1x के Windows 3.1x परिवार के लिए एक विस्तार है जिसने इन प्रणालियों के लिए Win32 API का सबसेट लागू किया है। "एस" "सबसेट" के लिए खड़ा है।
  • Win64 विंडोज आर्किटेक्चर के 64-बिट प्लेटफॉर्म पर लागू एपीआई का संस्करण है (2021 तक, x86-64 और AArch64)।[lower-alpha 1][22][23] एक आवेदन के 32-बिट और 64-बिट संस्करण दोनों अभी भी एक कोडबेस से संकलित किया जा सकता है, हालांकि कुछ पुराने एपीआई को पदावनत कर दिया गया है, और कुछ एपीआई जो पहले से ही Win32 में पदावनत थे, को हटा दिया गया था। डिफ़ॉल्ट रूप से सभी मेमोरी पॉइंटर्स 64-बिट होते हैं (एलएलपी64 मॉडल), इसलिए 64-बिट पॉइंटर अंकगणित के साथ संगतता के लिए स्रोत कोड की जांच की जानी चाहिए और आवश्यकतानुसार फिर से लिखा जाना चाहिए। [24]
  • विनसीई विंडोज सीई (Windows CE) ऑपरेटिंग सिस्टम के लिए विंडोज एपीआई का कार्यान्वयन है।

अन्य कार्यान्वयन

वाइन प्रोजेक्ट यूनिक्स जैसे प्लेटफार्मों के लिए लिनक्स कर्नेल एपीआई और विंडोज एपीआई के लिए लिखे गए कार्यक्रमों के बीच Win32 एपीआई संगतता परत प्रदान करता है। रिएक्टोस कदम और आगे जाता है और कोड के पुन: उपयोग और अनुकूलता को बढ़ावा देने के लिए वाइन प्रोजेक्ट के साथ मिलकर काम करते हुए, पूर्ण विंडोज ऑपरेटिंग सिस्टम को लागू करने का लक्ष्य रखता है। डॉसविन32 (DosWin32) और एचएक्स डॉस एक्सटेंडर अन्य परियोजनाएं हैं जो डॉस कमांड लाइन से सरल विंडोज प्रोग्राम के निष्पादन की अनुमति देने के लिए विंडोज एपीआई का अनुकरण करती हैं। ओडिन ओएस/2 पर विन32 का अनुकरण करने के लिए एक परियोजना है, जो माइक्रोसॉफ्ट कोड पर आधारित मूल विन-ओएस/2 अनुकरण का स्थान लेती है। अन्य छोटे कार्यान्वयन में मेवेल (MEWEL) और जिंक लाइब्रेरी सम्मिलित हैं, जिनका उद्देश्य डॉस (DOS) पर Win16 एपीआई के सबसेट को लागू करना था (प्लेटफ़ॉर्म-स्वतंत्र जीयूआई लाइब्रेरी की सूची देखें)।

विंडोज इंटरफेस सोर्स एनवायरनमेंट (वाइज) माइक्रोसॉफ्ट का लाइसेंसिंग प्रोग्राम था, जो डेवलपर्स को यूनिक्स और मैकिनटोश प्लेटफॉर्म पर विंडोज-आधारित एप्लिकेशन को फिर से कंपाइल और चलाने की अनुमति देता था। वाइज एसडीके विंडोज एपीआई के एक इम्यूलेटर पर आधारित थे जो उन प्लेटफॉर्म पर चल सकते थे।[24]

मानकीकरण के प्रयासों में Win16 के लिए सन का पब्लिक विंडोज इंटरफेस (PWI) सम्मिलित है (यह भी देखें: सन विंडोज एप्लीकेशन बाइनरी इंटरफेस (Wabi)), Win16 और Win32 के लिए विलो सॉफ्टवेयर का विंडोज एप्लीकेशन प्रोग्रामिंग इंटरफेस के लिए (APIW) (यह भी देखें: Willows TWIN), और ईसीएमए-234 (ECMA-234), जिसने विंडोज़ एपीआई को बाध्यकारी रूप से मानकीकृत करने का प्रयास किया।

कंपाइलर सपोर्ट

विंडोज एपीआई का उपयोग करने वाले सॉफ़्टवेयर को विकसित करने के लिए, कंपाइलर को ऊपर सूचीबद्ध माइक्रोसॉफ्ट-विशिष्ट डीएलएल का उपयोग करने में सक्षम होना चाहिए (कॉम-ऑब्जेक्ट्स Win32 के बाहर हैं और निश्चित विटेबल लेआउट मान लेते हैं)। कंपाइलर को या तो हेडर फाइलों को हैंडल करना चाहिए जो आंतरिक एपीआई फ़ंक्शन नामों को उजागर करता है या ऐसी फाइलों की आपूर्ति करता है।

C++ भाषा के लिए, ज़ोर्टेक (बाद में सिमेंटेक, फिर डिजिटल मार्स), वाटकॉम और बोरलैंड ने सभी प्रसिद्ध व्यावसायिक कंपाइलरों का उत्पादन किया है जिनका प्रायः Win16, Win32s और Win32 के साथ उपयोग किया जाता है। उनमें से कुछ ने मेमोरी एक्सटेंडर की आपूर्ति की, जिससे Win32 प्रोग्राम Microsoft के पुनर्वितरण योग्य Win32s DLL के साथ Win16 पर चल सके। Microsoft के पास C++ कंपाइलर होने से पहले ज़ोरटेक कंपाइलर विंडोज प्रोग्रामिंग के लिए शायद पहले स्थिर और प्रयोग करने योग्य C++ कंपाइलरों में से एक था।

अनुप्रयोगों के कुछ वर्गों के लिए, कंपाइलर सिस्टम को इंटरफ़ेस विवरण भाषा (आईडीएल) फ़ाइलों को संभालने में भी सक्षम होना चाहिए। सामूहिक रूप से, ये पूर्वापेक्षाएँ (संकलक, उपकरण, पुस्तकालय और शीर्षलेख) माइक्रोसॉफ्ट प्लेटफ़ॉर्म एसडीके के रूप में जानी जाती हैं। एक समय के लिए, माइक्रोसॉफ्ट विजुअल स्टूडियो और बोरलैंड की एकीकृत विकास प्रणाली एकमात्र एकीकृत विकास वातावरण (आईडीईस) थी जो इसे प्रदान कर सकती थी (हालाँकि, एसडीके पूरे आईडीई सूट से अलग से डाउनलोड करने योग्य है,माइक्रोसॉफ्ट विंडोज एसडीके से विंडोज़ 7 और .NET फ्रेमवर्क 4) ( microsoft.com/download/en/details.aspx?displaylang=en&id=8279 विंडोज 7 और .NET फ्रेमवर्क 4 के लिए माइक्रोसॉफ्ट विंडोज एसडीके)।।

2016 तक, मिनजीडब्ल्यू (MinGW) और सिग्विन (Cygwin) प्रोजेक्ट्स जीएनयू कंपाइलर कलेक्शन (जीसीसी) पर आधारित ऐसा वातावरण भी प्रदान करते हैं, जो Win32-विशिष्ट डीएलएल के विरुद्ध लिंकिंग को सरल बनाने के लिए स्टैंड-अलोन हेडर फ़ाइल सेट का उपयोग करता है। एलसीसी-Win32 जैकब नविया द्वारा अनुरक्षित C संकलक है, जो गैर-व्यावसायिक उपयोग के लिए फ्रीवेयर है। पेलेस सी, पेले ओरिनियस द्वारा अनुरक्षित फ्रीवेयर C संकलक है। फ्री पास्कल फ्री सॉफ्टवेयर ऑब्जेक्ट पास्कल कंपाइलर है जो विंडोज एपीआई को सपोर्ट करता है। एमएएसएम32 पैकेज एक परिपक्व परियोजना है जो माइक्रोसॉफ्ट मैक्रो असेंबलर (एमएएसएम) के तहत Windows API के लिए प्लेटफ़ॉर्म SDK से कस्टम-निर्मित या परिवर्तित हेडर और लाइब्रेरी का उपयोग करके समर्थन प्रदान करता है। फ्लैट असेंबलर एफएएसएम (FASM) लिनक्स पर चलने पर भी बाहरी लिंकर का उपयोग किए बिना विंडोज प्रोग्राम बनाने की अनुमति देता है।

स्ट्रक्चर्ड एक्सेप्शन हैंडलिंग (एसईएच) के लिए विंडोज-स्पेसिफिक कंपाइलर सपोर्ट की भी जरूरत होती है। यह सिस्टम दो उद्देश्यों को पूरा करता है: यह सब्सट्रेट प्रदान करता है जिस पर भाषा-विशिष्ट अपवाद हैंडलिंग को लागू किया जा सकता है, और यह है कि कैसे कर्नेल असाधारण स्थितियों के अनुप्रयोगों को सूचित करता है जैसे कि अमान्य सूचक या ढेर अतिप्रवाह को संदर्भित करना। माइक्रोसॉफ्ट/बोरलैंड C++ कंपाइलर्स में विंडोज 95 और NT में पेश होते ही इस सिस्टम का उपयोग करने की क्षमता थी, हालांकि, वास्तविक कार्यान्वयन अनियंत्रित था और वाइन प्रोजेक्ट और फ्री कंपाइलर्स के लिए रिवर्स-इंजीनियर होना था। एसईएच अपवाद हैंडलर फ्रेम को स्टैक पर धकेलने और फिर उन्हें थ्रेड-लोकल स्टोरेज (थ्रेड एनवायरनमेंट ब्लॉक का पहला फील्ड) में स्टोर की गई लिंक्ड लिस्ट में जोड़ने पर आधारित है। जब एक अपवाद मुक्त किया जाता है, तो कर्नेल और बेस लाइब्रेरी स्टैक चल रहे हैंडलर और फ़िल्टर को खोलते हैं, जैसा कि उनका सामना होता है। आखिरकार, एप्लिकेशन द्वारा बिना हैंडल किए गए हर अपवाद को डिफ़ॉल्ट बैकस्टॉप हैंडलर द्वारा निपटाया जाएगा, जो विंडोज कॉमन क्रैश डायलॉग को पॉप अप करता है।

यह भी देखें

टिप्पणियाँ

  1. Nomenclature of released 64-bit versions includes Windows XP Professional x64 Edition and x64 Editions of Windows Server 2003, Windows Vista and Windows Server 2008 on the x86-64 (AMD64) platform, and Windows 2000 Server Limited Edition, Windows XP 64-bit Edition, Windows Advanced Server 2003 for Itanium and Windows 2008 Advanced Server for Itanium on the IA-64 platform.

संदर्भ

  1. Russinovich, Mark (November 2006). "नेटिव एप्लिकेशन के अंदर". Microsoft Docs. Retrieved April 12, 2022.
  2. "पूर्वाभ्यास: एक पारंपरिक विंडोज़ डेस्कटॉप अनुप्रयोग बनाएँ (C++)". Microsoft Docs. February 23, 2022.
  3. 3.0 3.1 Mayberry, Michael (2012). WinRT से पता चला. New York City: Apress. p. 3. ISBN 978-1-4302-4585-8.
  4. 4.0 4.1 Microsoft Developer Network (July 2005). Overview of the Windows API. Retrieved August 28, 2005.
  5. Microsoft Developer Network (July 2005). Base Services. Retrieved August 28, 2005.
  6. Microsoft Developer Network (July 2005). Graphics Device Interface. Retrieved August 28, 2005.
  7. "जी". Microsoft Developer Network. Retrieved 2009-01-28.
  8. Microsoft Developer Network (July 2005). User Interface. Retrieved August 28, 2005.
  9. Microsoft Developer Network (2005). Common Dialog Box Library. Retrieved September 22, 2005.
  10. Microsoft Developer Network (July 2005). Common Control Library. Retrieved August 28, 2005.
  11. Microsoft Developer Network (July 2005). Windows Shell. Retrieved August 28, 2005.
  12. Microsoft Developer Network (2005). Shell Programmer's Guide. Retrieved August 28, 2005.
  13. Microsoft Developer Network (July 2005). Network Services. Retrieved August 28, 2005.
  14. Microsoft Developer Network (January 2006); Programming and reusing the browser Retrieved January 22, 2006.
  15. Texeira, Steve and Xavier Pacheco (2002). बोर्लैंड डेल्फी 6 डेवलपर गाइड. Sams. p. 253. ISBN 0672321157.
  16. Charles Petzold (December 2001). Programming Microsoft Windows with C#. Microsoft Press. Beyond the Console, page 47.
  17. Detailed analysis of changes in the Windows API from XP to 10. Retrieved September 08, 2016.
  18. Charles Petzold (November 11, 1998). Programming Windows, Fifth Edition. Microsoft Press. APIs and Memory Models, page 9.
  19. Smith, Graham (8 October 2022). "विंडोज 95 में मूल सिमसीटी में बग को ठीक करने के लिए विशेष कोड था". Rock, Paper, Shotgun (in English).
  20. Raymond Chen (October 15, 2003). What about BOZOSLIVEHERE and TABTHETEXTOUTFORWIMPS? Retrieved June 29, 2022.
  21. The Iseran Project (1996–2001). History of the Windows API. Retrieved October 7, 2005.
  22. "Windows XP Professional x64 संस्करण होम पेज". Microsoft.
  23. "Microsoft 64-बिट कम्प्यूटिंग अवलोकन". Microsoft.
  24. WISE Archived 2008-03-30 at the Wayback Machine

बाहरी संबंध