Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.139.86.56] |
|
Сообщ.
#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
,
|
|
|
Сообщ.
#16
,
|
|
|
В 2013 студии дефолтный компилятор собирает бех поддержки XP. Компилятор под XP надо то ли в настройках выбрать, то ли отдельно доустанавливать.
|
Сообщ.
#17
,
|
|
|
Цитата Kray74 @ В 2013 студии дефолтный компилятор собирает без поддержки XP. Компилятор под XP надо то ли в настройках выбрать, то ли отдельно доустанавливать. Гомосеки... Я же какой-то флаг относительно версии винды при сборке ставил. |
Сообщ.
#18
,
|
|
|
Цитата Kray74 @ В 2013 студии дефолтный компилятор собирает бех поддержки XP. Компилятор под XP надо то ли в настройках выбрать, то ли отдельно доустанавливать. Чего чего? В настройках проекта поставь линковать рантайм статически (размер бинарника вырастет). Либо надо ставить Visual C++ 2013 Redistributable на машину где не работает. Короче причина в том что нет рантайма - а ставить ты его будешь или прилинкуешь к проге решай сам. |
Сообщ.
#19
,
|
|
|
cppasm, если нет рантайма то будет ругань, что нет библиотек. Но отнюдь не что приложение невиндовое.
|
Сообщ.
#20
,
|
|
|
Цитата barazuk @ А вот этого уже не понял... Притащил на работу прогу, и под ХП собранное в 2013й студии не запускается. Это я накосячил, или это постоянно действующая акция? в настройках проекта выстави General -> Platform Toolset -> "visual studio 2013 - windows xp (v120_xp)" |
Сообщ.
#21
,
|
|
|
Цитата Cfon @ в настройках проекта выстави General -> Platform Toolset -> "visual studio 2013 - windows xp (v120_xp)" Ну теперь вопрос в том, можно ли это сделать из makefile... Если нет - то будет выжжена эта 2013 студия с ноута каленым железом и поганой метлой. |
Сообщ.
#22
,
|
|
|
Цитата barazuk @ если нет рантайма то будет ругань, что нет библиотек. Нет. Будет ругань если в импорте прописаны DLL которых нету. Ругается системный лоадер при попытке загрузки приложения. А у тебя при сборке в новых VS в манифесте написано что хочу такой-то рантайм. Рантайма нету - приложение не Win32. Свободен. Его запускать никто и не пытается. http://www.cyberforum.ru/cpp-beginners/thread1370466.html И до кучи: http://www.cyberforum.ru/visual-cpp/thread1460604.html В конце есть ссылки на MSDN чего и где настроить чтоб под XP работало. В том числе и из командной строки. Вопрос - нафига тебе студия если ты из консоли всё собираешь? Достаточно Windows SDK поставить и компилируй сколько влезет. |
Сообщ.
#23
,
|
|
|
Цитата barazuk @ Ну теперь вопрос в том, можно ли это сделать из makefile... Если нет - то будет выжжена эта 2013 студия с ноута каленым железом и поганой метлой. а я мне по кайфу, у меня на ноуте 4 версии ее устновлены с VS2008 по V2013 |
Сообщ.
#24
,
|
|
|
Цитата barazuk @ Мне вот все интересно, зачем компилить именно в ней.. Почему не использовать 2015? Если нет - то будет выжжена эта 2013 студия с ноута каленым железом и поганой метлой. |
Сообщ.
#25
,
|
|
|
Цитата simsergey @ Мне вот все интересно, зачем компилить именно в ней.. Почему не использовать 2015? Потому что она больше, медленнее, и в ней еще больше свистелок и перделок, которые я никогда не буду использовать Добавлено Цитата cppasm @ Вопрос - нафига тебе студия если ты из консоли всё собираешь? Достаточно Windows SDK поставить и компилируй сколько влезет. Не все... Собственно, 13я студия поставлена для того чтобы один заказик слабать, якобы только с ней работает библиотека, которую хотел использовать. Библиотека в итоге не работает. Переписывать мне ее под себя несколько лениво, поэтому в данный момент у меня стадия принятия решения - а оставить ли 13ю, или к черту удалить? |
Сообщ.
#26
,
|
|
|
Цитата barazuk @ Собственно, 13я студия поставлена для того чтобы один заказик слабать, якобы только с ней работает библиотека, которую хотел использовать. Библиотека в итоге не работает. Переписывать мне ее под себя несколько лениво, поэтому в данный момент у меня стадия принятия решения - а оставить ли 13ю, или к черту удалить? конечно удалить! студия для чайников |
Сообщ.
#27
,
|
|
|
Нарыл ключи для генерации выньХП...
Компилятору передаем Цитата -D_USING_V110_SDK71_ Линкеру Цитата /SUBSYSTEM:CONSOLE",5.01" (для консольного приложения, вестимо). Зверек приручен, не удаляю Теперь бы еще поднять сервер svn на хост-машине так, чтобы его из-под виртуалки было видно... И было бы просто мега. |
Сообщ.
#28
,
|
|
|
Цитата barazuk @ Нарыл ключи для генерации выньХП... По второй ссылке из поста 2013 студия, консоль, вывод, полголовы седая (сообщение #3700778) это всё было. Цитата barazuk @ Теперь бы еще поднять сервер svn на хост-машине так, чтобы его из-под виртуалки было видно... И было бы просто мега. В чём сложность? Ставишь на хост SVN как обычно, на ВМ включаешь сетевую в NAT и все дела (или Host Only если на виртуалке Инет не нужен). |
Сообщ.
#29
,
|
|
|
Цитата cppasm @ По второй ссылке из поста Сильно глубоко было, недочитал И на самом деле достаточно только флажка для линкера. Все остальное не имеет значения. ЗЫ. Я даже предполагаю, что на самом деле достаточно просто пару байт в исполняемом файле поменять, которые таргет версию винды обозначают. И все. |
Сообщ.
#30
,
|
|
|
Цитата cppasm @ Ставишь на хост SVN как обычно, на ВМ включаешь сетевую в NAT и все дела (или Host Only если на виртуалке Инет не нужен). Настройки НАТа Прикреплённая картинка
В качестве кошки, на которой тренироваться, взял вебморду мюторрента, на хосте все работает: Прикреплённая картинка
Адрес хоста из под геста вроде бы узнал: Прикреплённая картинка
Но не едут кони: Прикреплённая картинка
Что я делаю не так? |
Сообщ.
#31
,
|
|
|
Если адаптер 192.168.35.2 принадлежит хост-машине, и связь с ним есть (пингуется), то проблема в том, что на порту 8080 у него не висит http (или https ?) сервер.
Возможно он прикрыт фаерволом или Брендмавер Windows вдруг включился и вмешался. Еще, как вариант, хром почему-то не хочет идти на локальный ip. |
Сообщ.
#32
,
|
|
|
Пингуется, мюторрент стоит в исключениях брандмауэра. "Про нет хттп сервера" не понял.
|
Сообщ.
#33
,
|
|
|
Цитата barazuk @ "Про нет хттп сервера" не понял. Я имел ввиду, что svn не хочет отвечать на http по 8080 порту. Возможно он не настроен или не запущен, может он не смог овиснуть на этом порту, может он вообще не на нем висит.. Собственно. barazuk, а что Вы хотите сделать (получить)? SVN сервак? А по какой статье Вы его ставите? Или хотя бы как прога называется?, SVN серверов под вин вроде несколько. |
Сообщ.
#34
,
|
|
|
simsergey, для начала я хочу просто "увидеть" из под гостевой машины хост. Похоже Вы вообще ничего не поняли, что я пытался сделать. Либо перечитайте - либо не стоит давать странные советы
|
Сообщ.
#35
,
|
|
|
192.168.35.2 это варевский шлюз на котором DHCP висит и другие сетевые сервисы для обеспечения инфраструктуры.
У хоста твоего будет IP 192.168.35.1 На нём всё должно отвечать. |
Сообщ.
#36
,
|
|
|
Цитата cppasm @ У хоста твоего будет IP 192.168.35.1 он не пингуется. это норма? C:\Program Files\Far2>ping 192.168.35.1 Обмен пакетами с 192.168.35.1 по 32 байт: Превышен интервал ожидания для запроса. Превышен интервал ожидания для запроса. Превышен интервал ожидания для запроса. Превышен интервал ожидания для запроса. Статистика Ping для 192.168.35.1: Пакетов: отправлено = 4, получено = 0, потеряно = 4 (100% потерь), |
Сообщ.
#37
,
|
|
|
Цитата barazuk @ он не пингуется. это норма? Может быть и норма. Смотря как у тебя на хосте настроено и смотря какая ОС. В семёрке если выключено сетевое обнаружение то норма. Могут фаерволы всякие тоже блокировать ICMP трафик. Чтобы точно проверить IP выполни на хосте ipconfig /all и посмотри какой IP у адаптера VMnet8 Но с вероятностью 99% будет 192.168.35.1 |
Сообщ.
#38
,
|
|
|
Цитата cppasm @ В семёрке если выключено сетевое обнаружение то норма. включено Цитата cppasm @ ipconfig /all нет такого адаптера Добавлено (матюки матюки матюки)... Он был отключен... Теперь хост пингуется, и более того - наконец-то хост и гест друг друга по сети в принципе видят, не нужно больше все данные в гостевую закидывать через образы ЦД... Шайтанама!!! |
Сообщ.
#39
,
|
|
|
Цитата barazuk @ Он был отключен... Теперь хост пингуется, и более того - наконец-то хост и гест друг друга по сети в принципе видят, не нужно больше все данные в гостевую закидывать через образы ЦД... Поставь дополнения VMWare (VM > Install VMWare Tools) на гостевую ОС и сможешь в её окно копировать как в обычную папку в проводнике. Т.е. вообще без настройки сети. |