Win32 API ट्यूटोरियल
Win32 API के साथ शुरुआत करना
खोज…
टिप्पणियों
WinAPI (इसे Win32 के रूप में भी जाना जाता है; आधिकारिक तौर पर माइक्रोसॉफ्ट विंडोज एपीआई कहा जाता है) एक अनुप्रयोग प्रोग्रामिंग इंटरफ़ेस है जो सी में माइक्रोसॉफ्ट द्वारा विंडोज सुविधाओं तक पहुंच की अनुमति के लिए लिखा गया है। WinAPI के मुख्य घटक हैं:
- WinBase: कर्नेल फ़ंक्शंस, CreateFile, CreateProcess, आदि
- WinUser: GUI फ़ंक्शंस, CreateWindow, RegisterClass, आदि
- WinGDI: ग्राफिक्स फ़ंक्शंस, एलिप्से, सिलेक्टऑब्जेक्ट, आदि
- सामान्य नियंत्रण: मानक नियंत्रण, सूची दृश्य, स्लाइडर आदि
यह सभी देखें:
- MSDN पर Windows API इंडेक्स ।
संस्करण
एपीआई के संस्करण ऑपरेटिंग सिस्टम संस्करण से बंधे हैं। MSDN प्रलेखन API में प्रत्येक फ़ंक्शन के लिए न्यूनतम समर्थित ऑपरेटिंग सिस्टम को निर्दिष्ट करता है।
नमस्ते दुनिया
Microsoft Windows अनुप्रयोगों को आमतौर पर या तो एक कंसोल एप्लिकेशन या विंडो अनुप्रयोग के रूप में लिखा जाता है (अन्य प्रकार जैसे सेवाएं और प्लग-इन हैं)। प्रोग्रामर के लिए अंतर प्रोग्रामर द्वारा प्रदान किए गए एप्लिकेशन स्रोत के लिए मुख्य प्रवेश बिंदु के इंटरफ़ेस में अंतर है।
जब कोई C या C ++ एप्लिकेशन शुरू होता है, तो निष्पादन योग्य लोडर द्वारा उपयोग किया जाने वाला निष्पादन योग्य प्रवेश बिंदु वह रनटाइम होता है जो कंपाइलर द्वारा प्रदान किया जाता है। निष्पादन योग्य लोडर निष्पादन योग्य में पढ़ता है, आवश्यक छवि के लिए कोई भी सुधार करता है, और फिर निष्पादन योग्य प्रविष्टि बिंदु को आमंत्रित करता है जो सी या सी ++ प्रोग्राम के लिए कंपाइलर द्वारा प्रदान किया गया रनटाइम है।
लोडर द्वारा लागू किया गया निष्पादन योग्य एंट्री पॉइंट एप्लिकेशन प्रोग्रामर द्वारा प्रदान किया गया मुख्य एंट्री पॉइंट नहीं है, बल्कि इसके बजाय कंपाइलर और लिंकर द्वारा प्रदान किया गया रनटाइम जो निष्पादन योग्य बनाता है। रनटाइम अनुप्रयोग के लिए वातावरण सेट करता है और फिर प्रोग्रामर द्वारा प्रदान की गई मुख्य प्रविष्टि बिंदु को कॉल करता है।
एक विंडोज़ कंसोल एप्लिकेशन में प्रोग्रामर द्वारा प्रदान की जाने वाली मुख्य प्रविष्टि बिंदु के लिए कई अलग-अलग इंटरफेस हो सकते हैं। इनमें अंतर यह है कि क्या मुख्य प्रवेश बिंदु पारंपरिक int main (int argc, char *argv[])
या यदि यह int _tmain(int argc, _TCHAR* argv[])
का विंडोज विशिष्ट संस्करण है जो विस्तृत प्रदान करता है अनुप्रयोग मापदंडों में वर्ण। यदि आप Visual Studio का उपयोग करके एक Windows Win32 कंसोल एप्लिकेशन प्रोजेक्ट उत्पन्न करते हैं, तो उत्पन्न स्रोत विंडोज विशिष्ट संस्करण होगा।
एक विंडोज़ विंडो (GUI) एप्लिकेशन में प्रोग्रामर द्वारा प्रदान की जाने वाली मुख्य प्रविष्टि बिंदु के लिए एक अलग इंटरफ़ेस है। प्रोग्रामर द्वारा प्रदान किए गए इस मुख्य प्रवेश बिंदु में एक अधिक जटिल इंटरफ़ेस है क्योंकि रनटाइम जीयूआई वातावरण सेट करता है और एप्लिकेशन मापदंडों के साथ अतिरिक्त जानकारी प्रदान करता है।
यह उदाहरण विंडोज विंडो (जीयूआई) के मुख्य प्रवेश बिंदु इंटरफेस की व्याख्या करता है। इस विषय का पता लगाने के लिए आपके पास होना चाहिए:
- संकलक के साथ एक आईडीई (अधिमानतः विजुअल स्टूडियो)
- C ज्ञान
IDE का उपयोग करके एक रिक्त Win32 विंडो (GUI, कंसोल नहीं) प्रोजेक्ट बनाएं। लिंकर को सही रनटाइम के साथ लिंक करने के लिए प्रोजेक्ट सेटिंग्स को एक विंडो एप्लिकेशन (कंसोल एप्लिकेशन नहीं) के लिए सेट किया जाना चाहिए। एक बनाएं main.c
फ़ाइल परियोजना में जोड़ने और फिर निम्न कोड टाइप करें:
#include <windows.h>
int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow)
{
return MessageBox(NULL, "hello, world", "caption", 0);
}
यह हमारा Win32 "हैलो, दुनिया" कार्यक्रम है। पहला कदम विंडोज़ हेडर फ़ाइलों को शामिल करना है। सभी विंडोज़ के लिए मुख्य हेडर windows.h
, लेकिन अन्य हैं।
WinMain
एक कंसोल कंसोल एप्लिकेशन के साथ उपयोग किए जाने वाले मानक int main()
से अलग है। इंटरफ़ेस में अधिक पैरामीटर उपयोग किए जाते हैं और अधिक महत्वपूर्ण बात यह है कि विंडो एप्लिकेशन के लिए मुख्य प्रविष्टि बिंदु मानक C / C ++ से अलग कॉलिंग कन्वेंशन का उपयोग करता है।
क्वालीफायर APIENTRY
कॉलिंग कन्वेंशन को इंगित करता है, जो कि वह क्रम है जिसमें तर्कों को स्टैक the पर धकेल दिया जाता है। डिफ़ॉल्ट रूप से, कॉलिंग कन्वेंशन __cdecl
द्वारा इंगित मानक C कन्वेंशन है। हालाँकि Microsoft Windows API फ़ंक्शन के लिए एक अलग प्रकार के कॉलिंग कन्वेंशन, PASCAL सम्मेलन का उपयोग करता है, जिसे __stdcall
क्वालिफायर द्वारा इंगित किया गया है। APIENTRY
__stdcall
लिए windows.h
द्वारा शामिल हेडर फ़ाइलों में से एक में एक परिभाषित नाम है (यह भी देखें कि __stdcall क्या है? )।
WinMain
अगले तर्क इस प्रकार हैं:
- hInst: इंस्टेंस हैंडल
- hInstPrev: पिछला उदाहरण हैंडल। अब इस्तेमाल नहीं किया जाता।
- cmdline: कमांड लाइन आर्ग्युमेंट ( पास विनमन (या wWinMain) तर्क को मुख्य रूप से देखें )
- cmdshow: इंगित करता है कि क्या एक विंडो प्रदर्शित की जानी चाहिए।
हम अभी तक इनमें से किसी भी तर्क का उपयोग नहीं करते हैं।
WinMain()
अंदर, MessageBox()
लिए एक कॉल है, जो एक संदेश, एक संदेश बॉक्स के साथ एक सरल संवाद प्रदर्शित करता है। पहला तर्क स्वामी विंडो का हैंडल है। चूँकि हमारे पास अभी तक अपना स्वयं का विंडो नहीं है, इसलिए NULL
पास करें। दूसरा तर्क है शरीर का पाठ। तीसरा तर्क कैप्शन है, और चौथे तर्क में झंडे हैं। जब 0 पास किया जाता है, तो एक डिफ़ॉल्ट संदेश बॉक्स दिखाया जाता है। नीचे दिए गए आरेख संदेश बॉक्स संवाद को विच्छेदित करता है।
अच्छे लिंक:
† केवल 32 बिट सिस्टम पर। अन्य आर्किटेक्चर के पास अलग-अलग कॉलिंग कन्वेंशन हैं।