Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[13.58.247.231] |
|
Страницы: (3) [1] 2 3 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Я вот как-то вообще не понимаю философию работы труъ-32хбитной, труъ-Юникодной 2013 студии, которая заставила меня переконвертить мой проект полностью под Юникод. Лопатил его 4 часа, и в результате...
Ничего не понимаю. Какими танцами мне вывести строку в консоль??? Выдрал проблемное место из кода в песочницу, и вот... #include "stdafx.h" #include <iostream> #include <Windows.h> using namespace std; int PatchDTB(LPCTSTR lpszFName){ cout << "Bad downloader batch: " << lpszFName << endl; cout << "Bad downloader batch: " << (LPCTSTR)lpszFName << endl; cout << "Bad downloader batch: " << (const wchar_t *)lpszFName << endl; return 1; } int _tmain(int argc, _TCHAR* argv[]) { cout << "Boo!" << endl; cout << _T("Boo!") << endl; PatchDTB(argv[0]); return 0; } Цитата Boo! 0134CD34 Bad downloader batch: 002A9518 Bad downloader batch: 002A9518 Bad downloader batch: 002A9518 Добавлено #include "stdafx.h" #include <iostream> #define _AFXDLL #include <afx.h> #include <Windows.h> using namespace std; int PatchDTB(LPCTSTR lpszFName){ cout << "Bad downloader batch: " << lpszFName << endl; cout << "Bad downloader batch: " << (LPCTSTR)lpszFName << endl; cout << "Bad downloader batch: " << (const wchar_t *)lpszFName << endl; cout << "Bad downloader batch: " << CStringA(lpszFName) << endl; return 1; } int _tmain(int argc, _TCHAR* argv[]) { cout << "Boo!" << endl; cout << _T("Boo!") << endl; PatchDTB(argv[0]); return 0; } Вот в таком варианте оно работает (последняя строка и копированием в CStringA())... Но это уже зашквар какой-то... Все строки копировать??? Неужели нет попроще метода??? Писец я пять часов потратил на перенос простенького проекта... И до сих пор не закончил. Я так понимаю, что на порядок быстрее тупо по прежнему работать в 6й студии под виртуалкой и не знать скорбей... |
Сообщ.
#2
,
|
|
|
Цитата barazuk @ Ничего не понимаю. Какими танцами мне вывести строку в консоль??? Выдрал проблемное место из кода в песочницу, и вот... std::wcout |
Сообщ.
#3
,
|
|
|
Цитата barazuk @ Это все майкрософт..Какими танцами мне вывести строку в консоль??? Я использую тип wchar_t, а запись текста в юникод из исходников делается через L"какой-то-текст". wchar_t* str; wchar_t symbol; wchar_t const_str[] = L"some string"; str = const_str; str = L"any text"; symbol = L's'; Имеется стандартная библиотека для работы со строками в wchar_t. Линк |
Сообщ.
#4
,
|
|
|
Цитата barazuk @ Я так понимаю, что на порядок быстрее тупо по прежнему работать в 6й студии под виртуалкой и не знать скорбей... Вообще-то можно и в 2013 студии юникод не юзать если он тебе не нужен. |
Сообщ.
#5
,
|
|
|
Цитата cppasm @ Вообще-то можно и в 2013 студии юникод не юзать если он тебе не нужен. MFC в 2013 студии только Юникодная, не? Отчего же печаль началась... Хидер afx.h сказал, что _UNICODE не задано, давай, досвидания! |
Сообщ.
#6
,
|
|
|
Цитата barazuk @ MFC только Юникодная, не? не барсук MFC создавалась в далёкие 90е, когда об Юникоде даже и не слышали |
Сообщ.
#7
,
|
|
|
Цитата Cfon @ MFC создавалась в далёкие 90е, когда об Юникоде даже и не слышали Угу, а первый ВижуалС был 16битный и под вин95. Так что, он до сих пор выпускается 16 битах и не поддерживает линейку НТ? |
Сообщ.
#8
,
|
|
|
я так и не понял проблема то решена?
|
Сообщ.
#9
,
|
|
|
Цитата Cfon @ я так и не понял проблема то решена? Пока только ректально - отключением половины кода и обвязкой самого необходимого перед выводом в консоль через конструктор CStringA. Теперь работаю над разделением своих библиотек на четыре части - всегда однобайтные, всегда Юникодные, использующие TCHAR в зависимости от версии студии и те, которым глубоко на все это пофигу |
Сообщ.
#10
,
|
|
|
Цитата barazuk @ Теперь работаю над разделением своих библиотек на четыре части - всегда однобайтные, всегда Юникодные, использующие TCHAR в зависимости от версии студии и те, которым глубоко на все это пофигу Странно. Действительно, должно быть 4 варианта. x86-x64, ASCII-UNICODE. Два независимых параметра, 4 комбинации. Все тексты лучше использовать с "TCHAR", тогда они станут универсальными для ASCII-UNICODE и, стало быть, для всех сборок вообще. |
Сообщ.
#11
,
|
|
|
Цитата ЫукпШ @ Все тексты лучше использовать с "TCHAR", тогда они станут универсальными для ASCII-UNICODE и, стало быть, для всех сборок вообще. Угу. Мне нужно обрабатывать файлы как в однобайтовой OEM кодировке, так и в Юникоде. Никак при этом не нужно их ни смешивать, ни перегаживать конвертированием. Но при этом обрабатывать сходными алгоритмами и выводить как на консоль, таки периодически рендерить текст в картинки. "TCHAR" в этой ситуации никак не спасает. Цитата ЫукпШ @ x64 Вообще неактуально. Добавлено Цитата ЫукпШ @ Все тексты лучше использовать с "TCHAR", тогда они станут универсальными Да нифига. Никак в этой ситуации tchar не порешал. cout << "Bad downloader batch: " << (LPCTSTR)lpszFName << endl; Плюс бесконечные переделки строковых функций на все более безопасные, так что для использования в разных студиях нужно сто дефайнов мутить и переделывать вызова под другое количество параметров. |
Сообщ.
#12
,
|
|
|
Цитата barazuk @ Угу. Мне нужно обрабатывать файлы как в однобайтовой OEM кодировке, так и в Юникоде. Никак при этом не нужно их ни смешивать, ни перегаживать конвертированием. Но при этом обрабатывать сходными алгоритмами и выводить как на консоль, таки периодически рендерить текст в картинки. "TCHAR" в этой ситуации никак не спасает. Бред какой-то. Всегда лучше работать в одной кодировке и не смешивать их в одной программе. А если и нужно выводить в другой - тут как раз и нужно перекодировать. Иначе "да". TCHAR - не поможет. Да и вообще мало что поможет. |
Сообщ.
#13
,
|
|
|
Цитата ЫукпШ @ Всегда лучше работать в одной кодировке и не смешивать их в одной программе. обычно при этом получаются продукты, за которые хочется удавить. Которые перекодируют то что не просят и в итоге на выходе совсем не то, что нужно. |
Сообщ.
#14
,
|
|
|
Цитата barazuk @ обычно при этом получаются продукты, за которые хочется удавить. Которые перекодируют то что не просят и в итоге на выходе совсем не то, что нужно. Да. Вероятно, поэтому голова быстро седеет. |
Сообщ.
#15
,
|
|
|