А что такое русский текст и как он представлен, им сначала объяснять не надо, да? Перед тем как они его начинают в программы добавлять вообще. Никакие CharToOem вызывать не надо, и setlocale тем более(кстати, да, надо было написать в постинге про эту смешную функции и извращения с ней в контексте линукса). Надо использовать UTF-16 функции. Всё! В винде нигде cp1251 нет, вообще. Там либо UTF-16(в т.ч. внутри ядра везде), либо ASCII-7, для функций, где юникод в принципе не поддерживается(компиляторы HLSL из DX например, и т.п.). Если не считать A-функции естественно, но их считать не надо, и использовать тем более, это вообще осталось только для обратной совместимости со всяким древним хламом.
WCHAR(он же wchar_t)
W. A-функций остались для обратной совместимости, еще раз! Их вообще использовать не надо. В новым API один только юникод. Да даже вон в OLE тоже один только юникод.
Нет, не нужно. Просто добавляешь префикс L к строкам.
А ты вообще в курсе что такое паскалевские строки? Это один байт на длину и байты на буквы. BSTR это _не_ паскалевские строки, это LPWSTR(UTF-16) плюс 32-битное машинное слово под длину. И кстати, что вместо такой структуры данных использовать, по-твоему? Нуль-терминированные строки чтоли? Спасибо, поржал.
Нахрена BOM для строк, живущих исключительно внутри программы и передающихся в системные функции? У LPWSTR Native Endianness.
no subject