Описание функции


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