
19.09.2008, 14:52
|
|
Участник форума
Регистрация: 20.11.2006
Сообщений: 172
С нами:
10248177
Репутация:
106
|
|
4p3
Да нет, компилятор ничего не преобразовывал  . То что я привел, я согласен бред полнейший. Это я привел просто для примера, т.к. правильно сделать не знаю пока как. Вот и обращаюсь за помощью
|
|
|

20.09.2008, 01:01
|
|
Участник форума
Регистрация: 18.08.2008
Сообщений: 159
С нами:
9332069
Репутация:
92
|
|
Сообщение от ++Norton++
4p3
Да нет, компилятор ничего не преобразовывал  . То что я привел, я согласен бред полнейший. Это я привел просто для примера, т.к. правильно сделать не знаю пока как. Вот и обращаюсь за помощью
вот выдалось время свободное
Код:
//---------------------------------------------------------------------------
#include <iostream>
#include <cstdlib>
#pragma hdrstop
using namespace std;
//---------------------------------------------------------------------------
void PrintVarArg(char** args, int nArgsCount)
{
for (int i = 0;i < nArgsCount;++i)
cout << args[i];
}
#pragma argsused
int main(int argc, char* argv[])
{
char *szArgs[] = {"dalek", "kaled"};
PrintVarArg(szArgs, 2);
system("pause");
return 0;
}
//---------------------------------------------------------------------------
|
|
|

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;
}
|
|
|

24.09.2008, 23:00
|
|
Участник форума
Регистрация: 02.12.2007
Сообщений: 132
С нами:
9705420
Репутация:
21
|
|
Сообщение от 4p3
Код:
#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;
}
В общем ошибка такая:
error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
когда убрал _t и оставил просто main, то ошибка исчезла.
При компиляции ошибок небыло, а вот при дебаге или запуске...
спс за помощь 
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|