Описание функции
CharToOem
Преобразует двухбайтовую строку UTF-16 (точнее в UCS-2) в 866 на русской Windows.
CharToOem(*Src, *Dst)
Параметры
*Src | Указатель на исходную строку |
*Dst |
Указатель на буфер в памяти, куда будет помещён результат. |
Примечания
Если *Dst будет читаться с помощью PeekS() с указанием длины -1, то *Dst должен быть на 1 байт больше. Если учесть, что двухбайтовая строка преобразуется в однобайтовую, то размер выделяемой памяти в 2 раза меньше исходной строки.Пример
EnableExplicit
Procedure.s WinAPI_CharToOem(Text.s)
Protected Result.s, *d, length
length = Len(Text)
If length
*d = AllocateMemory(length + 1)
If *d
CharToOem_(@Text, *d)
Result = PeekS(*d, length, #PB_Ascii)
FreeMemory(*d)
EndIf
EndIf
ProcedureReturn Result
EndProcedure
Procedure.s WinAPI_OemToChar(Text.s)
Protected Result.s, *d, length, *a
length = Len(Text)
If length
*d = AllocateMemory(length * 2 + 2)
If *d
*a = Ascii(Text)
OemToChar_(*a, *d)
Result = PeekS(*d, -1, #PB_Unicode)
FreeMemory(*d)
FreeMemory(*a)
EndIf
EndIf
ProcedureReturn Result
EndProcedure
Define s.s = "Привет"
Debug s
s = WinAPI_CharToOem(s)
Debug s
s = WinAPI_OemToChar(s)
Debug s