На главную Наши проекты:
Журнал   ·   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
  
> 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й студии не запускается. Это я накосячил, или это постоянно действующая акция?

                                Прикреплённая картинка
                                Прикреплённая картинка
                                  В 2013 студии дефолтный компилятор собирает бех поддержки XP. Компилятор под XP надо то ли в настройках выбрать, то ли отдельно доустанавливать.
                                    Цитата Kray74 @
                                    В 2013 студии дефолтный компилятор собирает без поддержки XP. Компилятор под XP надо то ли в настройках выбрать, то ли отдельно доустанавливать.


                                    Гомосеки... Я же какой-то флаг относительно версии винды при сборке ставил.
                                      Цитата Kray74 @
                                      В 2013 студии дефолтный компилятор собирает бех поддержки XP. Компилятор под XP надо то ли в настройках выбрать, то ли отдельно доустанавливать.

                                      Чего чего? :facepalm:
                                      В настройках проекта поставь линковать рантайм статически (размер бинарника вырастет).
                                      Либо надо ставить Visual C++ 2013 Redistributable на машину где не работает.
                                      Короче причина в том что нет рантайма - а ставить ты его будешь или прилинкуешь к проге решай сам.
                                      Сообщение отредактировано: cppasm -
                                        cppasm, если нет рантайма то будет ругань, что нет библиотек. Но отнюдь не что приложение невиндовое.
                                          Цитата barazuk @
                                          А вот этого уже не понял... Притащил на работу прогу, и под ХП собранное в 2013й студии не запускается. Это я накосячил, или это постоянно действующая акция?

                                          в настройках проекта выстави General -> Platform Toolset -> "visual studio 2013 - windows xp (v120_xp)" :D
                                          Сообщение отредактировано: Cfon -
                                            Цитата Cfon @
                                            в настройках проекта выстави General -> Platform Toolset -> "visual studio 2013 - windows xp (v120_xp)"


                                            Ну теперь вопрос в том, можно ли это сделать из makefile... Если нет - то будет выжжена эта 2013 студия с ноута каленым железом и поганой метлой.
                                              Цитата barazuk @
                                              если нет рантайма то будет ругань, что нет библиотек.

                                              Нет.
                                              Будет ругань если в импорте прописаны DLL которых нету.
                                              Ругается системный лоадер при попытке загрузки приложения.
                                              А у тебя при сборке в новых VS в манифесте написано что хочу такой-то рантайм.
                                              Рантайма нету - приложение не Win32. Свободен. Его запускать никто и не пытается.
                                              http://www.cyberforum.ru/cpp-beginners/thread1370466.html
                                              И до кучи:
                                              http://www.cyberforum.ru/visual-cpp/thread1460604.html
                                              В конце есть ссылки на MSDN чего и где настроить чтоб под XP работало.
                                              В том числе и из командной строки.
                                              Вопрос - нафига тебе студия если ты из консоли всё собираешь?
                                              Достаточно Windows SDK поставить и компилируй сколько влезет.
                                              Сообщение отредактировано: cppasm -
                                                Цитата barazuk @
                                                Ну теперь вопрос в том, можно ли это сделать из makefile... Если нет - то будет выжжена эта 2013 студия с ноута каленым железом и поганой метлой.

                                                а я мне по кайфу, у меня на ноуте 4 версии ее устновлены с VS2008 по V2013 :crazy:
                                                  Цитата barazuk @
                                                  Если нет - то будет выжжена эта 2013 студия с ноута каленым железом и поганой метлой.
                                                  Мне вот все интересно, зачем компилить именно в ней.. Почему не использовать 2015?
                                                    Цитата simsergey @
                                                    Мне вот все интересно, зачем компилить именно в ней.. Почему не использовать 2015?


                                                    Потому что она больше, медленнее, и в ней еще больше свистелок и перделок, которые я никогда не буду использовать

                                                    Добавлено
                                                    Цитата cppasm @
                                                    Вопрос - нафига тебе студия если ты из консоли всё собираешь?
                                                    Достаточно Windows SDK поставить и компилируй сколько влезет.


                                                    Не все... Собственно, 13я студия поставлена для того чтобы один заказик слабать, якобы только с ней работает библиотека, которую хотел использовать. Библиотека в итоге не работает. Переписывать мне ее под себя несколько лениво, поэтому в данный момент у меня стадия принятия решения - а оставить ли 13ю, или к черту удалить?
                                                      Цитата barazuk @
                                                      Собственно, 13я студия поставлена для того чтобы один заказик слабать, якобы только с ней работает библиотека, которую хотел использовать. Библиотека в итоге не работает. Переписывать мне ее под себя несколько лениво, поэтому в данный момент у меня стадия принятия решения - а оставить ли 13ю, или к черту удалить?

                                                      конечно удалить! студия для чайников :D
                                                        Нарыл ключи для генерации выньХП...

                                                        Компилятору передаем
                                                        Цитата
                                                        -D_USING_V110_SDK71_

                                                        Линкеру
                                                        Цитата
                                                        /SUBSYSTEM:CONSOLE",5.01"


                                                        (для консольного приложения, вестимо).

                                                        Зверек приручен, не удаляю :)

                                                        Теперь бы еще поднять сервер svn на хост-машине так, чтобы его из-под виртуалки было видно... И было бы просто мега.
                                                          Цитата barazuk @
                                                          Нарыл ключи для генерации выньХП...

                                                          По второй ссылке из поста 2013 студия, консоль, вывод, полголовы седая (сообщение #3700778) это всё было.

                                                          Цитата barazuk @
                                                          Теперь бы еще поднять сервер svn на хост-машине так, чтобы его из-под виртуалки было видно... И было бы просто мега.

                                                          В чём сложность?
                                                          Ставишь на хост SVN как обычно, на ВМ включаешь сетевую в NAT и все дела (или Host Only если на виртуалке Инет не нужен).
                                                          Сообщение отредактировано: cppasm -
                                                            Цитата cppasm @
                                                            По второй ссылке из поста


                                                            Сильно глубоко было, недочитал :)

                                                            И на самом деле достаточно только флажка для линкера. Все остальное не имеет значения.

                                                            ЗЫ. Я даже предполагаю, что на самом деле достаточно просто пару байт в исполняемом файле поменять, которые таргет версию винды обозначают. И все.
                                                            Сообщение отредактировано: barazuk -
                                                              Цитата cppasm @
                                                              Ставишь на хост SVN как обычно, на ВМ включаешь сетевую в NAT и все дела (или Host Only если на виртуалке Инет не нужен).


                                                              Настройки НАТа

                                                              Прикреплённая картинка
                                                              Прикреплённая картинка


                                                              В качестве кошки, на которой тренироваться, взял вебморду мюторрента, на хосте все работает:

                                                              Прикреплённая картинка
                                                              Прикреплённая картинка


                                                              Адрес хоста из под геста вроде бы узнал:

                                                              Прикреплённая картинка
                                                              Прикреплённая картинка


                                                              Но не едут кони:

                                                              Прикреплённая картинка
                                                              Прикреплённая картинка


                                                              Что я делаю не так?
                                                              Сообщение отредактировано: barazuk -
                                                                Если адаптер 192.168.35.2 принадлежит хост-машине, и связь с ним есть (пингуется), то проблема в том, что на порту 8080 у него не висит http (или https ?) сервер.
                                                                Возможно он прикрыт фаерволом или Брендмавер Windows вдруг включился и вмешался.
                                                                Еще, как вариант, хром почему-то не хочет идти на локальный ip.
                                                                Сообщение отредактировано: simsergey -
                                                                  Пингуется, мюторрент стоит в исключениях брандмауэра. "Про нет хттп сервера" не понял.
                                                                    Цитата barazuk @
                                                                    "Про нет хттп сервера" не понял.

                                                                    Я имел ввиду, что svn не хочет отвечать на http по 8080 порту.
                                                                    Возможно он не настроен или не запущен, может он не смог овиснуть на этом порту, может он вообще не на нем висит..
                                                                    Собственно.

                                                                    barazuk, а что Вы хотите сделать (получить)? :)
                                                                    SVN сервак? А по какой статье Вы его ставите? Или хотя бы как прога называется?, SVN серверов под вин вроде несколько.
                                                                      simsergey, для начала я хочу просто "увидеть" из под гостевой машины хост. Похоже Вы вообще ничего не поняли, что я пытался сделать. Либо перечитайте - либо не стоит давать странные советы ;)
                                                                        192.168.35.2 это варевский шлюз на котором DHCP висит и другие сетевые сервисы для обеспечения инфраструктуры.
                                                                        У хоста твоего будет IP 192.168.35.1
                                                                        На нём всё должно отвечать.
                                                                          Цитата cppasm @
                                                                          У хоста твоего будет IP 192.168.35.1


                                                                          он не пингуется. это норма?
                                                                          ExpandedWrap disabled
                                                                            C:\Program Files\Far2>ping  192.168.35.1
                                                                            Обмен пакетами с 192.168.35.1 по 32 байт:
                                                                             
                                                                            Превышен интервал ожидания для запроса.
                                                                            Превышен интервал ожидания для запроса.
                                                                            Превышен интервал ожидания для запроса.
                                                                            Превышен интервал ожидания для запроса.
                                                                             
                                                                            Статистика Ping для 192.168.35.1:
                                                                                Пакетов: отправлено = 4, получено = 0, потеряно = 4 (100% потерь),
                                                                            Цитата barazuk @
                                                                            он не пингуется. это норма?

                                                                            Может быть и норма. Смотря как у тебя на хосте настроено и смотря какая ОС.
                                                                            В семёрке если выключено сетевое обнаружение то норма.
                                                                            Могут фаерволы всякие тоже блокировать ICMP трафик.

                                                                            Чтобы точно проверить IP выполни на хосте ipconfig /all и посмотри какой IP у адаптера VMnet8
                                                                            Но с вероятностью 99% будет 192.168.35.1
                                                                              Цитата cppasm @
                                                                              В семёрке если выключено сетевое обнаружение то норма.


                                                                              включено

                                                                              Цитата cppasm @
                                                                              ipconfig /all


                                                                              нет такого адаптера

                                                                              Добавлено
                                                                              (матюки матюки матюки)...

                                                                              Он был отключен... Теперь хост пингуется, и более того - наконец-то хост и гест друг друга по сети в принципе видят, не нужно больше все данные в гостевую закидывать через образы ЦД... :wall: :wall: :wall:

                                                                              Шайтанама!!!
                                                                                Цитата barazuk @
                                                                                Он был отключен... Теперь хост пингуется, и более того - наконец-то хост и гест друг друга по сети в принципе видят, не нужно больше все данные в гостевую закидывать через образы ЦД...

                                                                                Поставь дополнения VMWare (VM > Install VMWare Tools) на гостевую ОС и сможешь в её окно копировать как в обычную папку в проводнике.
                                                                                Т.е. вообще без настройки сети.
                                                                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                                                0 пользователей:


                                                                                Рейтинг@Mail.ru
                                                                                [ Script execution time: 0,1356 ]   [ 21 queries used ]   [ Generated: 19.04.24, 03:01 GMT ]