MAKEINTRESOURCE मैक्रो सिर्फ संख्यात्मक पैरामीटर और स्ट्रिंग पॉइंटर के बीच कास्टिंग करता है। परिणामी स्ट्रिंग पॉइंटर अमान्य है और इसे संसाधन नाम के रूप में संदर्भित नहीं किया जा सकता है। हालांकि, संसाधन हैंडलिंग एपीआई ऐसे पॉइंटर्स को उनके पूर्ण मूल्य से पहचानता है और उन्हें संसाधन आईडी के रूप में व्यवहार करता है, न कि संसाधन का नाम। चूंकि सी शैली API अधिक भार का समर्थन नहीं करता, वे की तरह दो कार्यों को परिभाषित नहीं कर सकते हैं:
HICON LoadIcon(HINSTANCE hInstance,LPCTSTR lpIconName);
HICON LoadIcon(HINSTANCE hInstance,UINT resourceId);
तो, API डेवलपर को दोनों ही मामलों के लिए एक ही समारोह का उपयोग करने के, API उपयोगकर्ताओं के लिए MAKEINTRESOURCE मैक्रो प्रदान करने का निर्णय लिया। मेरा मानना है कि दो अलग-अलग कार्यों बेहतर दिखाई दे सकता है कि:
HICON LoadIconByName(HINSTANCE hInstance,LPCTSTR lpIconName);
HICON LoadIconById(HINSTANCE hInstance,UINT resourceId);
लेकिन इस तरह से Windows API कार्यान्वित किया जाता है नहीं है। मान्य संसाधन आईडी हमेशा न्यूनतम संभव सूचक मूल्य से कम है। संसाधन नाम पैरामीटर इस मैक्रो के बिना एपीआई को पास किया जाता है, और इसका मान प्रतिबंधित नहीं है।
स्रोत
2010-08-31 15:43:42
ये मैक्रोज़ हमेशा मुझे भ्रमित करते हैं। उन्होंने केवल दो अलग-अलग कार्यों को लागू क्यों नहीं किया, जो एक पूर्णांक आईडी लेता है और एक स्ट्रिंग लेता है ... – dreamlax
धन्यवाद यह वास्तव में मैं क्या देख रहा था। –
@dreamlax: ऐसा नहीं कर रहा है जो वास्तव में पहली बार बनाई गई समस्याओं में से एक हल करता है;) डीएलएल में सभी डेटा और फ़ंक्शंस को एक ordinal असाइन किया जाता है, और यदि आप चाहें तो नाम के स्थान पर ऑर्डिनल का उपयोग किया जा सकता है। यह डीएलएल में 65 के लिए उपयोग करने योग्य ordinals की संख्या पर निर्भर करता है (विडंबना यह है कि, इस मैक्रो के अस्तित्व के लिए और यह 'GetProcAddress'' के साथ कैसे इंटरैक्ट करता है)। यदि आप कार्यों के कई संस्करणों के साथ डीएलएल संस्करणों के बीच एबीआई संगतता को बनाए रखना चाहते हैं, तो प्रत्येक अद्वितीय ordinals के साथ, कम कार्यों को आप बेहतर चीजों को छेड़छाड़ कर रहे हैं। –