2012-06-16 15 views
7

संभव डुप्लिकेट:
What does a “CALLBACK” declaration in C do?विंडोज एपीआई फ़ंक्शन घोषणा में "कॉलबैक" का क्या अर्थ है?

एक WindowProc() फ़ंक्शन का प्रोटोटाइप इस

 LRESULT CALLBACK WindowProc(HWND hWnd,UINT message , WPARAM wParan, LPARAM lParam); 

है, लेकिन मैं कॉलबैक कीवर्ड भर में कभी नहीं आए हैं, केवल मैं पता है कि एक कॉलबैक फ़ंक्शन वह है जिसे आप किसी अन्य फ़ंक्शन पर पॉइंटर पास करते हैं, तो यह कॉलबैक वास्तव में क्या है? और यह क्या करता है?

उत्तर

7

यह #के रूप में परिभाषित है, क्योंकि Win32 API कॉलबैक फ़ंक्शंस के बारे में यही मानता है। यह एक कॉलिंग सम्मेलन है - यह निम्न स्तर पर फ़ंक्शन कॉल की व्यवस्था के तरीके का वर्णन करता है - CPU स्टैक पर पैरामीटर कैसे व्यवस्थित होते हैं, और इसी प्रकार। अपेक्षित स्टैक लेआउट (i। ई। सम्मेलन) के बारे में धारणा कॉलर और कैली के बीच मेल खाना चाहिए, अन्यथा सभी प्रकार के मजेदार परिणाम हो सकते हैं।

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

Win16 में वापस, कॉलबैक को far pascal के रूप में परिभाषित किया गया था। यह उपयोगकर्ता कार्यों के लिए डिफ़ॉल्ट रूप से कम होने की संभावना है, खासकर सी प्रोग्राम में। तथ्य यह है कि कॉलबैक को पास्कल कॉलिंग सम्मेलन माना जाता था, यह एक ऐतिहासिक कलाकृति थी।

+0

_stdcall क्या है? जिस तरह से LRESULT रिटर्न प्रकार है, _stdclall क्या है? गिरावट में यह किस स्थिति पर कब्जा कर रहा है? और, क्या आप इसे थोड़ा सा सरल बना सकते हैं- यह क्या कॉलबैक करता है? – Ghost

+0

__stdcall एक [कॉलिंग सम्मेलन] (http://en.wikipedia.org/wiki/Calling_convention) को इंगित करता है, जो कि कई संभव है। कॉलबैक एक ऐसी तकनीक है जहां एपीआई इसके विपरीत आपके फ़ंक्शन को कॉल करती है। इसे सही तरीके से करने के लिए, एपीआई को कॉलिंग सम्मेलन को जानने की आवश्यकता है जो आपका फ़ंक्शन निम्नानुसार है। –

+0

हम कॉलिंग सम्मेलन को कैसे बदल सकते हैं? और क्या Winproc फ़ंक्शन भी किसी भी तरह से सम्मेलन का पालन करता है (क्या यह समझ में नहीं आता है, हम खिड़कियां बता रहे हैं कि कौन से सम्मेलन का पालन करना है, जिसका अर्थ है कि Winproc सम्मेलन से जुड़ा हुआ है)? प्रश्नों की सरणी के लिए खेद है, मैं पूरी तरह संतुष्ट नहीं हूं – Ghost

संबंधित मुद्दे