 |
|

20.09.2008, 20:41
|
|
Участник форума
Регистрация: 02.12.2007
Сообщений: 132
С нами:
9705420
Репутация:
21
|
|
Есть такой вопросик: почему не работает ф-я CharToOem() в Visual Studio2008(C++9), тоесть ругается с ошибкой
error C2664: 'CharToOemW' : cannot convert parameter 1 from 'char [7]' to 'LPCWSTR'
В С++ 6 все отлично работало, а тут не хочет, может кто знает в чем тут проблема?
char z[] = "ПревеД";
CharToOem(z,z);
Последний раз редактировалось horlyk; 20.09.2008 в 21:06..
|
|
|

20.09.2008, 21:19
|
|
Участник форума
Регистрация: 18.08.2008
Сообщений: 159
С нами:
9332069
Репутация:
92
|
|
Юзай уникод, ВС9 заточена под уникод
wchar_t *wcString = L"Preved";
|
|
|

20.09.2008, 21:47
|
|
Участник форума
Регистрация: 02.12.2007
Сообщений: 132
С нами:
9705420
Репутация:
21
|
|
а немного по подробнее можно? как к примеру вывести на консольный экран:
char z[] = "ПревеД";
puts(z);
чтобы на консоле отображало ПревеД а не хз что. А то я попробовал то что ты написал, так там цифры одни.
И еще, можно както глобально делать перекодировку в ср1251 без CharToOem()? а то немного напряжно постоянно использовать эту ф-ю для каждой переменной.
И все же, как тут правильно использовать CharToOem()? интересно всетаки что они изменили.
|
|
|

20.09.2008, 22:25
|
|
Участник форума
Регистрация: 18.08.2008
Сообщений: 159
С нами:
9332069
Репутация:
92
|
|
horlyk, первый параметр CharToOem - источник, второй - приемник. Просто IMHO, я бы не совмещал их. Хз что может произойти, это, конечно, зависит от реализации.
Тем более NecroSoft MSDN вот что выдает
Return Value
The return value is always nonzero except when you pass the same address to lpszSrc and lpszDst in the wide-character version of the function. In this case the function returns zero and GetLastError returns ERROR_INVALID_ADDRESS.
Так... теперь немножко теории.
wchar_t это по сути дело тот же short. Потому, используя, cout ты получаешь на выходе цифры.
Теперь перейдет в "раздел как это решить".
использовать wcout. Он нормально вывод уникод. Можешь написать свою функцию, которая будет вызывать CharToOem и выводить. Можешь вызывать
setlocale(LC_ALL, "Russian");
она тоже ничего 
|
|
|

21.09.2008, 12:39
|
|
Участник форума
Регистрация: 11.04.2007
Сообщений: 219
С нами:
10044113
Репутация:
13
|
|
а лутше просто поставь в настройках проекта мульти байт код и должно работать.
|
|
|

21.09.2008, 13:31
|
|
Участник форума
Регистрация: 02.12.2007
Сообщений: 132
С нами:
9705420
Репутация:
21
|
|
чет я немного не догоняю, wcout тож не хочет русские букви выводить.
wchar_t z[7] = L"ПревеД";
wcout << z << endl;
пробовал и просто чар. Плз, напишите ктото маленький примерчик.
|
|
|

21.09.2008, 15:31
|
|
Участник форума
Регистрация: 18.08.2008
Сообщений: 159
С нами:
9332069
Репутация:
92
|
|
Код:
#include <iostream>
#include "stdafx.h"
using std::wcout;
int _tmain()
{
wchar_t *wcString = L"ненене";
setlocale(LC_ALL, "Russian");
wcout << L"дадада!" << L" " << wcString << std::endl;
_wsystem(L"pause");
return 0;
}
|
|
|

21.09.2008, 21:26
|
|
Постоянный
Регистрация: 08.01.2006
Сообщений: 865
С нами:
10703786
Репутация:
343
|
|
как прописать свою софтинку в автозагрузку? (нужен пример кода)
|
|
|

21.09.2008, 21:40
|
|
Постоянный
Регистрация: 25.05.2007
Сообщений: 448
С нами:
9981026
Репутация:
1564
|
|
2bxN5
http://www.softholm.com/articles/register.html
|
|
|

22.09.2008, 19:50
|
|
Участник форума
Регистрация: 27.03.2008
Сообщений: 288
С нами:
9538880
Репутация:
83
|
|
тэк-с, вроде где-то пробегала пред моими глазами инфа о том, что это может сама консоль не поддерживать (русский язык имею ввиду)
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|