На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
Страницы: (3) [1] 2 3  все  ( Перейти к последнему сообщению )  
> 2013 студия, консоль, вывод, полголовы седая
    Я вот как-то вообще не понимаю философию работы труъ-32хбитной, труъ-Юникодной 2013 студии, которая заставила меня переконвертить мой проект полностью под Юникод. Лопатил его 4 часа, и в результате...

    Ничего не понимаю. Какими танцами мне вывести строку в консоль??? Выдрал проблемное место из кода в песочницу, и вот...

    ExpandedWrap disabled
      #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


    Добавлено
    ExpandedWrap disabled
      #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й студии под виртуалкой и не знать скорбей...
    Сообщение отредактировано: barazuk -
      Цитата barazuk @
      Ничего не понимаю. Какими танцами мне вывести строку в консоль??? Выдрал проблемное место из кода в песочницу, и вот...

      std::wcout :D
        Цитата barazuk @
        Какими танцами мне вывести строку в консоль???
        Это все майкрософт..

        Я использую тип wchar_t, а запись текста в юникод из исходников делается через L"какой-то-текст".
        ExpandedWrap disabled
          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.
        Линк
          Цитата barazuk @
          Я так понимаю, что на порядок быстрее тупо по прежнему работать в 6й студии под виртуалкой и не знать скорбей...

          Вообще-то можно и в 2013 студии юникод не юзать если он тебе не нужен.
            Цитата cppasm @
            Вообще-то можно и в 2013 студии юникод не юзать если он тебе не нужен.


            MFC в 2013 студии только Юникодная, не? Отчего же печаль началась... Хидер afx.h сказал, что _UNICODE не задано, давай, досвидания!
            Сообщение отредактировано: barazuk -
              Цитата barazuk @
              MFC только Юникодная, не?

              не барсук :D
              MFC создавалась в далёкие 90е, когда об Юникоде даже и не слышали :D
                Цитата Cfon @
                MFC создавалась в далёкие 90е, когда об Юникоде даже и не слышали


                Угу, а первый ВижуалС был 16битный и под вин95. Так что, он до сих пор выпускается 16 битах и не поддерживает линейку НТ?
                Сообщение отредактировано: barazuk -
                  я так и не понял проблема то решена? :D
                    Цитата Cfon @
                    я так и не понял проблема то решена?


                    Пока только ректально - отключением половины кода и обвязкой самого необходимого перед выводом в консоль через конструктор CStringA.

                    Теперь работаю над разделением своих библиотек на четыре части - всегда однобайтные, всегда Юникодные, использующие TCHAR в зависимости от версии студии и те, которым глубоко на все это пофигу :)
                    Сообщение отредактировано: barazuk -
                      Цитата barazuk @
                      Теперь работаю над разделением своих библиотек на четыре части - всегда однобайтные, всегда Юникодные, использующие TCHAR в зависимости от версии студии и те, которым глубоко на все это пофигу :)

                      Странно.
                      Действительно, должно быть 4 варианта.
                      x86-x64, ASCII-UNICODE. Два независимых параметра, 4 комбинации.
                      Все тексты лучше использовать с "TCHAR", тогда они станут универсальными
                      для ASCII-UNICODE и, стало быть, для всех сборок вообще.
                        Цитата ЫукпШ @
                        Все тексты лучше использовать с "TCHAR", тогда они станут универсальными
                        для ASCII-UNICODE и, стало быть, для всех сборок вообще.


                        Угу. Мне нужно обрабатывать файлы как в однобайтовой OEM кодировке, так и в Юникоде. Никак при этом не нужно их ни смешивать, ни перегаживать конвертированием. Но при этом обрабатывать сходными алгоритмами и выводить как на консоль, таки периодически рендерить текст в картинки.

                        "TCHAR" в этой ситуации никак не спасает.

                        Цитата ЫукпШ @
                        x64


                        Вообще неактуально.

                        Добавлено
                        Цитата ЫукпШ @
                        Все тексты лучше использовать с "TCHAR", тогда они станут универсальными


                        Да нифига. Никак в этой ситуации tchar не порешал.

                        ExpandedWrap disabled
                            cout << "Bad downloader batch: " << (LPCTSTR)lpszFName << endl;


                        Плюс бесконечные переделки строковых функций на все более безопасные, так что для использования в разных студиях нужно сто дефайнов мутить и переделывать вызова под другое количество параметров.
                        Сообщение отредактировано: barazuk -
                          Цитата barazuk @
                          Угу. Мне нужно обрабатывать файлы как в однобайтовой OEM кодировке, так и в Юникоде. Никак при этом не нужно их ни смешивать, ни перегаживать конвертированием. Но при этом обрабатывать сходными алгоритмами и выводить как на консоль, таки периодически рендерить текст в картинки.

                          "TCHAR" в этой ситуации никак не спасает.

                          Бред какой-то.
                          Всегда лучше работать в одной кодировке и не смешивать их в одной программе.
                          А если и нужно выводить в другой - тут как раз и нужно перекодировать.

                          Иначе "да". TCHAR - не поможет. Да и вообще мало что поможет.
                            Цитата ЫукпШ @
                            Всегда лучше работать в одной кодировке и не смешивать их в одной программе.


                            обычно при этом получаются продукты, за которые хочется удавить. Которые перекодируют то что не просят и в итоге на выходе совсем не то, что нужно.
                              Цитата barazuk @
                              обычно при этом получаются продукты, за которые хочется удавить. Которые перекодируют то что не просят и в итоге на выходе совсем не то, что нужно.

                              Да. Вероятно, поэтому голова быстро седеет.
                                А вот этого уже не понял... Притащил на работу прогу, и под ХП собранное в 2013й студии не запускается. Это я накосячил, или это постоянно действующая акция?

                                Прикреплённая картинка
                                Прикреплённая картинка
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) [1] 2 3  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0429 ]   [ 17 queries used ]   [ Generated: 17.05.24, 03:29 GMT ]