Описание функции
MultiByteToWideChar
Преобразует однобайтовый символ в двубайтовый.
MultiByteToWideChar(CodePage, dwFlags, lpMultiByteStr, cbMultiByte, lpWideCharStr, cchWideChar)
Параметры
CodePage | Исходная кодировка, например 866 #CP_ACP (0) #CP_MACCP (2) #CP_OEMCP (1) #CP_SYMBOL (42) #CP_THREAD_ACP (3) #CP_UTF7 (65000) #CP_UTF8 (65001) |
dwFlags |
#MB_PRECOMPOSED (1) #MB_COMPOSITE (2) #MB_USEGLYPHCHARS (4) #MB_ERR_INVALID_CHARS (?) |
lpMultiByteStr |
Указатель на исходную строку, которая будет преобразовываться |
cbMultiByte |
Размер строки lpMultiByteStr в байтах, или -1, если строка заканчивается NULL |
lpWideCharStr |
Указатель на буфер в памяти, куда будет помещён результат. |
cchWideChar |
Размер буфера lpWideCharStr в байтах. Если 0, то функция возвращает размер буфера памяти, требуемый для помещения результата, включая NULL. |
Возвращаемое значение
Успех: | Возвращает число символов записанных в буфер. |
Ошибка: | Возвращает 0, при ошибке. GetLastError возвращает 4 варианта ошибок. |
Примечания
Стоит почитать официальную справку, так как здесь в основном показан пример использования, чтобы легче понять как работает функция, там много нюансов.Пример
EnableExplicit
Procedure.s WinAPI_MultiByteToWideChar(String$, CodePage)
Protected *a, *m, Result$, size
*a = Ascii(String$)
size = MultiByteToWideChar_(CodePage, 0, *a, MemorySize(*a), 0, 0)
If size
*m = AllocateMemory(size)
If *m
If MultiByteToWideChar_(CodePage, 0, *a, MemorySize(*a), *m, size)
Result$ = PeekS(*m)
EndIf
FreeMemory(*m)
EndIf
EndIf
FreeMemory(*a)
ProcedureReturn Result$
EndProcedure
Debug WinAPI_MultiByteToWideChar("ЏаЁўҐв", 866) ; 866
Debug WinAPI_MultiByteToWideChar("рТЙЧЕФ", 20866) ; KOI8
Debug WinAPI_MultiByteToWideChar("їаШТХв", 28595) ; ISO-8859-5
Debug WinAPI_MultiByteToWideChar("Привет", 65001) ; UTF8