Описание функции
OemToChar
Преобразует Oem (866) в двухбайтовую строку, на русской Windows.
OemToChar(*Src, *Dst)
Параметры
*Src | Указатель на исходную строку, обязательно Ascii (однобайтовая), результат функции Ascii() |
*Dst |
Указатель на буфер в памяти, куда будет помещён результат. |
Примечания
Если *Dst будет читаться с помощью PeekS() с указанием длины -1, то *Dst должен быть на 2 байта больше. Если учесть, что однобайтовая строка преобразуется в двухбайтовую, то размер выделяемой памяти в 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