Ввод юникод-символов с консоли (Windows)
FreeBasic :: Программирование :: Общее
Страница 1 из 1
Ввод юникод-символов с консоли (Windows)
Для того, чтобы воспользоваться юникодовыми строками (как-никак, уже двадцать первый век на дворе), необходимо использовать в своих программах тип WString. Однако вводить с консоли юникодовые строки Васик не умеет. Поэтому есть грязный хак с использованием высокоуровневой Windows-функции чтения с консоли ReadConsole, устраняющий сие недоразумение.
Для начала необходимо включить режим UNICODE вот так:
Также после объявления константы не забываем подключить заголовочный файл Windows.
Параметры этой функции означают следующее:
hConsolelnput – дескриптор входного потока консоли.
IpBuffer – указатель на строку, в которую будет записана вводимая строка символов.
nNumberOfCharsToRead – размер буфера, указанного lpBuffer, делим пополам и вычитаем пару байт.
ipNumberOfCharsRead – количество действительно введенных символов (нужно передать адрес этой переменной).
lpReserved – зарезервировано, должно быть 0.
Теперь в переменной intSymbolsCount содержится количество прочтённых символов
Параметры этой функции означают следующее:
hConsoleOutput – дескриптор выходного потока консоли.
lpBuffer – указатель на выводимую строку.
nNumberOfCharsToWrite – размер буфера, указанного IpBuffer.
IpNumberOfCharsWritten – количество действительно выведенных символов.
lpReserved – зарезервировано, должно быть 0.
Для начала необходимо включить режим UNICODE вот так:
- Код:
#define unicode
Также после объявления константы не забываем подключить заголовочный файл Windows.
- Код:
#include "windows.bi"
- Код:
Dim strBuffer As WString*(1024*32)
- Код:
Dim InHandle As HANDLE = GetStdHandle(STD_INPUT_HANDLE)
- Код:
Dim OutHandle As HANDLE = GetStdHandle(STD_OUTPUT_HANDLE)
- Код:
Dim intSymbolsCount As Integer
Параметры этой функции означают следующее:
hConsolelnput – дескриптор входного потока консоли.
IpBuffer – указатель на строку, в которую будет записана вводимая строка символов.
nNumberOfCharsToRead – размер буфера, указанного lpBuffer, делим пополам и вычитаем пару байт.
ipNumberOfCharsRead – количество действительно введенных символов (нужно передать адрес этой переменной).
lpReserved – зарезервировано, должно быть 0.
- Код:
ReadConsole(InHandle, @strBuffer, 1024*16, @intSymbolsCount, 0)
Теперь в переменной intSymbolsCount содержится количество прочтённых символов
- Код:
Print("Количество прочтённых символов " & Wstr(intSymbolsCount))
' Печатаем то, что мы получили на экран
Print(strBuffer)
Параметры этой функции означают следующее:
hConsoleOutput – дескриптор выходного потока консоли.
lpBuffer – указатель на выводимую строку.
nNumberOfCharsToWrite – размер буфера, указанного IpBuffer.
IpNumberOfCharsWritten – количество действительно выведенных символов.
lpReserved – зарезервировано, должно быть 0.
- Код:
WriteConsole(OutHandle, @strBuffer, 32766, @intSymbolsCount, 0)
FreeBasic :: Программирование :: Общее
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|