#ifndef __GB18030_H #define __GB18030_H // // Flags for dwFlags in NlsDllCodePageTranslation. // #define NLS_CP_CPINFO 0x10000000 #define NLS_CP_MBTOWC 0x40000000 #define NLS_CP_WCTOMB 0x80000000 //////////////////////////////////////////////////////////////////////////// // // gb18030.h // // This is the header for using the c_g18030.dll in the system. // This file lists all exported functions in c_g18030.dll. // c_g18030.dll is a codpeage conversion DLL for the Chinese GB-18030 codepage // (Windows codepage 54936). // // The best way to use c_g18030.dll is to use the Windows API // MultiByteToWideChar() and WideCharToMultiByte(), and pass 54936 as the codepage // number. Internally, MultiByteToWideChar() and WideCharToMultiByte() call function // in c_g18030.dll using these exported functions. // // You can also use this header and load these functions dynamically from c_g18030.dll. // However, this is not recommended since MulitByteToWideChar() and WideCharToMultiByte() // are much easier to use. // //////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// // // NlsDllCodePageTranslation // This routine is the main exported procedure for the functionality in // c_g18030.dll. It can be used to get code page information or do conversion // depending on the value of dwFlags. // // Parameters: // CodePage The value of the codepage. The value should be 54936. Otherwise, // 0 will be returned and GetLastError() will return ERROR_INVALID_PARAMETER. // // dwFlags It can be one of these values // NLS_CP_CPINFO To return code page information in the buffer pointed by // lpCPInfo. lpMultiByteStr/cchMultiByte/lpWideCharStr/cchWideChar are not used. // // NLS_CP_MBTOWC Convert GB-18030 bytes to Unicode characters. // The source GB-18030 characters should be pointed by lpMultiByteStr, and cchMultiByte should // contains the byte count of the buffer. // The Unicode result will be stored in the buffer pointed by lpWideCharStr, and cchWideChar // should contain the character count of the Unicode buffer. // If lpWideCharStr or cchWideChar are zero, the expected character count of the Unicode result // will be returned, and no real conversion will be done. // lpCPInfo is not used in this case. // // NLS_CP_WCTOMB Convert Unicode characters to GB-18030 bytes. // The source Unicode string should be pointed by lpWideCharStr, and cchWideChar should // contians the character count of the buffer. // The GB-18030 result will be stored in the buffer pointed by lpMultiByteStr, and cchMultiByte // should contain the byte count of the GB-18030 buffer. // If lpMultiByteStr or cchMultiByte are zero, the byte count of the GB-18030 result // will be returned, and no real conversion will be done. // lpCPInfo is not used in this case. // // lpMulitByteStr Pointed to a buffer which contains multi-byte GB-18030 characters. This can be a source buffer // or target buffer, depending on the value of dwFlags. // // cchMulitByte The byte count of the multi-byte buffer. // // lpWideCharStr Pointed to a buffer which contains Unicode characters. This can be a source buffer // or target buffer, depending on the value of dwFlags. // // cchWideChar The character count of the Unicode buffer. // // lpCPInfo A pointer which points to a structure of CPINFO. CPINFO is defined in Platform SDK. // // Returns: // 1 if the function succeeds. // 0 if the function fails // //////////////////////////////////////////////////////////////////////////// STDAPI_(DWORD) NlsDllCodePageTranslation( DWORD CodePage, DWORD dwFlags, LPSTR lpMultiByteStr, int cchMultiByte, LPWSTR lpWideCharStr, int cchWideChar, LPCPINFO lpCPInfo); //////////////////////////////////////////////////////////////////////////// // // BytesToUnicode // // Convert GB-18030 bytes to Unicode characters. // // Parameters: // [IN] lpMultiByteStr The multi-byte string to be converted. // [IN] cchMultiByte The byte count of the multi-byte string to be converted // [OUT] pcchLeftOverBytes Pointer to UINT which contains GB-18030 bytes at the end of the buffer that can not be converted. // These bytes could be the leading bytes of valid GB18030 bytes in the next incoming GB18030 bytes. // [IN] lpWiedCharStr The target Unicode buffer. // [IN] cchWideChar The character count of the target Unicode buffer. // // Returns: // The character count of the Unicode character that are converted. // //////////////////////////////////////////////////////////////////////////// STDAPI_(DWORD) BytesToUnicode( BYTE* lpMultiByteStr, UINT cchMultiByte, UINT* pcchLeftOverBytes, LPWSTR lpWideCharStr, UINT cchWideChar); //////////////////////////////////////////////////////////////////////////// // // UnicodeToBytes // // Convert Unicode characters to GB-18030 bytes. // // Parameters: // [IN] lpWideCharStr The Unicode string to be converted. // [IN] cchWideChar The character count of the Unicode string to be converted. // [IN] lpMultiByteStr The target multi-byte buffer. // [IN] cchMultiByte The byte count of the target multi-byte buffer. // // Returns: // The byte count of the Unicode character that are generated. // //////////////////////////////////////////////////////////////////////////// STDAPI_(DWORD) UnicodeToBytes( LPWSTR lpWideCharStr, UINT cchWideChar, LPSTR lpMultiByteStr, UINT cchMultiByte); #endif