Win32 API
Ansi- और वाइड-कैरेक्टर फ़ंक्शन
खोज…
परिचय
तर्क के रूप में एक या अधिक स्ट्रिंग लेने वाले कार्यों के लिए विंडोज एपीआई प्रलेखन आमतौर पर इस तरह दिखेगा:
BOOL WINAPI CopyFile(
_In_ LPCTSTR lpExistingFileName,
_In_ LPCTSTR lpNewFileName,
_In_ BOOL bFailIfExists
);
दो स्ट्रिंग मापदंडों के लिए डेटाटाइप कई भागों से बना है:
- एलपी = लंबे सूचक
- सी = कास्ट
- T = TCHAR
- एसटीआर = स्ट्रिंग
अब TCHAR
क्या मतलब है? यह कार्यक्रम के संकलन के लिए चुने गए मंच पर निर्भर करता है।
CopyFile
ही एक मैक्रो है, इसे कुछ इस तरह से परिभाषित किया गया है:
#ifdef UNICODE
#define CopyFile CopyFileW
#else
#define CopyFile CopyFileA
#endif
तो वास्तव में दो CopyFile
फ़ंक्शन हैं और संकलक झंडे के आधार पर, CopyFile
मैक्रो एक या दूसरे को हल करेगा।
वहाँ कोर टोकन, TCHAR
के रूप में परिभाषित किया गया है:
#ifdef _UNICODE
typedef wchar_t TCHAR;
#else
typedef char TCHAR;
#endif
इसलिए फिर से, संकलित झंडे के आधार पर, TCHAR एक "संकीर्ण" या "चौड़ा" (2 बाइट्स) वर्ण है।
तो जब यूनिकोड परिभाषित किया गया है, CopyFile
होने के लिए परिभाषित किया गया है CopyFileW
, जो उनके पैरामीटर, जो UTF-16 इनकोडिंग होने की उम्मीद है के रूप में 2-बाइट वर्ण सरणियों का उपयोग करेगा।
यूनिकोड से परिभाषित नहीं है, तो CopyFile
होने के लिए परिभाषित किया गया है CopyFileA
जो एकल-बाइट चरित्र सरणियों जो वर्तमान उपयोगकर्ता के डिफ़ॉल्ट एएनएसआई एन्कोडिंग में एन्कोड करने की उम्मीद कर रहे हैं का उपयोग करता है।
दो समान मैक्रोज़ हैं: UNICODE
, Windows API को विस्तृत स्ट्रिंग्स और _UNICODE
(एक अग्रणी अंडरस्कोर के साथ) की उम्मीद करता है जो C रनटाइम लाइब्रेरी में समान सुविधाओं को सक्षम करता है।
ये परिभाषित हमें ANSI और यूनिकोड-मोड में संकलित कोड लिखने की अनुमति देते हैं।
यह जानना महत्वपूर्ण है कि ANSI एन्कोडिंग एक सिंगल-बाइट एन्कोडिंग (यानी लैटिन -1) एक मल्टी-बाइट एन्कोडिंग (यानी शिफ्ट जिस) हो सकती है, हालांकि utf-8 है, दुर्भाग्य से, अच्छी तरह से समर्थित नहीं है।
इसका मतलब है कि न तो एएनएसआई, न ही इन कार्यों के वाइड-कैरेक्टर वेरिएंट को निश्चित चौड़ाई के एन्कोडिंग के साथ काम करने के लिए माना जा सकता है।