Ответы пользователя по тегу Visual Studio
  • Выбор Visual Studio для изучения C# по книге Эндрю Стиллмена "Изучаем c# 3 изд."?

    Спасибо за суммон.
    Собственно все зависит от того, что в собираетесь изучать - Windows Store приложения или все-таки язык C#. Сейчас с Windows Store прилагами (которые для Win 8.1) ситуация неясная в том плане, что особо не стоит на них заморачиваться вообще и лучше сразу брать Windows Universal платформу, если конечно вообще интересует этот тип приложений.
    Несовместимости могут быть, вам после установки студии сразу надо ставить на нее последний апдейт, на 2012-ю: https://support.microsoft.com/en-gb/kb/2872520, на 2013-ю: https://support.microsoft.com/en-us/kb/3021976, тогда многие проблемы уйдут. Странно, что 2015-я работает заметно медленнее - системные требования для нее мало отличались от 2013-й, особенно для Community-версии без навороченных фишек. Попробуйте еще раз ее, поставьте минимум компонент.
    Из 2012-й и 2013-й советую вторую, она лучше поддерживается (на 2012 MS хочет забить побыстрее), пошустрее даже и меньше проблем совместимости. Она настолько мало отличается от 2012-й, что будет удивительно, если она будет тупить сильнее.
    На версию в книге по возможности не обращайте внимания, там действительно будет последняя вышедшая на момент написания.
    Ответ написан
    1 комментарий
  • Как игровые движки компилируют код?

    Nipheris
    @Nipheris Куратор тега C++
    Вы явно путаете жужжащих мух с теплыми котлетами. Игровые движки создаются разработчиками, также же как и любые другие приложения. Если это игровой движок в классическом понимании (нативный, на D3D или OpenGL) - то это нативное приложение, для создания которого применяются в общем-то обычные хорошо известные инструменты: язык программирования и его тулчейн (компилятор+линковщик) - это минимум, а там уже у кого как - IDE (одну из которых вы упомянули в тегах), просто редактор типа sublime и т.д.
    exe-файл, как и любой другой модуль на любой платформе (PE(exe, dll) на винде, ELF (бинарник/so) на линухе и т.д.) - это результат работы линковщика. Линковщик собирает сгенеренные компилятором объектные файлы и другие библиотеки в такой модуль, объектные файлы генерятся компилятором из исходного кода, исходный код пишут разработчики.
    Для Microsoft Word, Half-Life и KDE в общем и целом этот процесс - одинаковый. Разница только в инструментах, платформах и мелочах.
    Смысл вопроса из заголовка - "как ДВИЖКИ компилируют код?" я так и не понял, если вы имеете в виду скрипты, которые можно выполнять средствами движка - это другая история, многие серьезные двиги используют интепретаторы существующих скриптовых языков (Lua например весьма популярен) или пишут свой для реализации на этом скриптовом языке игровой логики, интерфейсных плагинов (в WoW так делают), ну и так далее.
    P.S. Если уж упомянули в тегах студию, поставьте её, создайте простейший консольный проект (Win32 Console Application), скомпильте и запустите - и вы выполните всю ту цепочку, которую выполняют разработчики нативных приложений (только она у них может быть сложнее, кастомизирована под их нужды, и в их проектах не 2 cpp-файла, а 10 тысяч).
    Ответ написан
    Комментировать
  • C++ загрузка библиотек и dll из определенного файла?

    Nipheris
    @Nipheris Куратор тега C++
    Армянское Радио указал вам правильное направление (т.е. если вы не хотите СРАЗУ грузить dll при запуске exe-шника, а хотите сделать это позже), но вам следует учесть, что:
    1) загружать все равно придется вручную, механизма в C++ для автоматической подгрузки dll именно в момент обращения к функции из нее не существует
    2) загрузка вручную приводит вас к тому, что линковщик не будет связывать ваш exe и dll. Это значит, что вы не сможете пользоваться предварительными объявлениями функций в хедере - вам пригодятся только типы, а указатели на код функций нужно будет получать динамически, как сказал Армянское Радио - по GetProcAddress(). Собственно, это за вас делает ОС при обычной линковке exe и dll.
    3) пункты 1 и 2 разумеется актуальны только для DLL, для тех "DLL", которые на самом деле не DLL, а дотнетовские сборки, свои правила, не имеющие ничего общего с этими (там сборки и так по-дефолту грузятся в момент первого использования типа из этой сборки);

    С учетом всего сказанного, неясно, зачем это вам: в 99% случаев динамическая загрузка нужна для реализации "плагинов" - когда заранее неизвестно, какая DLL будет загружена, чтобы потом можно было без перекомпиляции подсунуть любую DLL, если она экспортирует требуемые функции (для примера - плагины в foobar 2000).
    У вас же нужно вполне конкретно загрузить SFML, так что непонятно зачем вам такие заморочки.
    Ответ написан
    Комментировать
  • Что за ошибка Метрики при сборке пакета?

    Nipheris
    @Nipheris Куратор тега C#
    Спасибо за суммон.
    В этой сборке действительно есть тип со странным именем, которое даже толком не парсится (возможно, содержит символы юникода):
    87d35e4abf0a4629b83d87a242fc21de.png
    Вероятно это имя дал типу обфускатор, который использовали в Яндексе для этой сборки (а его использовали, судя по именам методов и полей вида A, b, C и т.д.)
    Думаю, об этой проблеме нужно отписать Яндексу (если конечно для этого пакета не существует опенсорсных исходников, что сомнительно).
    Ответ написан
    1 комментарий
  • Как убрать таблицу в RichTextBox (Visual Studio)?

    Nipheris
    @Nipheris Куратор тега C#
    Посоветую поискать, как заставить текстбокс принимать только plain-text при вставке. Не уверен, что есть такая настройка, но по сути это то, чего нужно добиться. В зависимости от типа контента, который готова принять программа, Excel отдаст нужное содержимое.
    Ответ написан
    Комментировать
  • Не удается разрешить сборку VC90.DebugCRT?

    Nipheris
    @Nipheris Куратор тега C++
    Значит так, во-первых вам для Qt и для вашего приложения нужно использовать один тулчейн (компилятор), иначе будет огромное количество странных проблем. Т.к. вы разрабатываете в 2012-й студии, а, к сожалению, официально 4-й кьют под эту студию не собирался, вам придется как минимум поставить компилятор из 2010-й студии (не помню, возможно 2012-ю можно таргетировать на старый компилятор, чтобы не ставить 2010-ю студию целиком). Можно и попробовать собрать из исходников, но я не могу назвать это простым делом.
    Во-вторых, если мы представим, что вы выполнили предыдущий этап, и у вас есть собранный Qt и компилятор той же версии, то в зависимости от конфигурации (Debug|Release) ваша программа будет линковаться на разные рантаймы. DLL-файлы рантайма имеют букву 'd' в конце имени файла. Для разных версий VC++ они называются по разному:
    msvcr90[d].dll+msvcp90[d].dll - Visual Studio 2008 (MSVC 9.0)
    msvcr100[d].dll+msvcp100[d].dll - Visual Studio 2010 (MSVC 10.0)
    msvcr110[d].dll+msvcp110[d].dll - Visual Studio 2012 (MSVC 11.0)
    msvcr120[d].dll+msvcp120[d].dll - Visual Studio 2013 (MSVC 12.0)
    Для чего я это привел - т.к. ваша ошибка прилетела скорее всего из подсистемы side-by-side, и связана с конфликтом версий библиотек, в качестве workaround советую вам найти дебаг-библиотеки там где у вас установлена студия, и скопировать из к exe-шнику вашего приложения, чтобы эти библиотеки подхватывались приоритетнее. Однако перед тем, как вы это сделаете, попробуйте следующее:
    0) разберитесь с версией компилятора, под которую собирался Qt. Возможно лучшее решение - таки поставить компилятор из 2010-й, не решив этот вопрос продолжать нормально работать невозможно
    1) убедитесь, что пересобрали проект (сделайте Rebuild All)
    2) поставьте апдейты на 2012-ю студию, если она не последней версии
    Если проблема останется, возьмите Dependecy Walker, натравите на Exe-шник, и проверьте, откуда он подтягивает debug-библиотеки.
    Если есть вопросы - в комментарии.
    Ответ написан
  • Общие файлы *.cs в несколький проектах с разной версией .NET Framework?

    Nipheris
    @Nipheris Куратор тега C#
    Можно сделать линки на файлы в другой папке, в 2015-й студии появились Shared-проекты - это проекты, которые не компилятся в привычном понимании (в отдельную сборку), а "инклудятся" в каждый проект, который на этот shared-project ссылается. Однако,
    > чтобы избежать создания лишних *.dll библиотек?
    в чем собственно проблема? Под разные дотнет можно скомпилить, сделав разные конфигурации проекта, это нормальная ситуация. Вам нужно, чтобы один exe-шник был строго?
    Ответ написан
  • IDE не видит код?

    Nipheris
    @Nipheris Куратор тега C#
    1) удалите .suo-файл из папки проекта. Вы потеряете брекпоинты и закладки, но это возможно полечит проблему;
    2) пользуйтесь последней релизной версией - даже в RC могут быть проблемы.
    Ответ написан
  • Реально ли запустить Visual Studio как portable?

    Nipheris
    @Nipheris Куратор тега C#
    > или может есть другой компилятор под С#?
    в зависимости от версии винды относительно (!) свежий дотнет может быть уже предустановлен, а с ним и csc, т.е. компилятор. С семеркой, например, идет версия 3.5. Конечно старовато, но для попробовать сойдет. Писать код можно хоть в блокноте, разумеется удобство не очень - можете посмотреть другие IDE для шарпа, возможно какие-то станут не в Program Files. Посмотрите кстати свежеиспеченную Visual Studio Code - это конечно не замена полной студии, и больше ориентирована на веб, но все-таки лучше, чем Блокнот. И да, устанавливается в AppData, что как раз вам подойдет.
    Если очень хочется более свежего компилятора, а дотнет установлен старый - можете попробовать повозиться с Roslyn, но это если у вас уже какой-то опыт с дотнетом есть.
    Ответ написан
    1 комментарий
  • "Не существует подходящего определяемого пользователем преобразования." DataGridView. Что не так?

    Nipheris
    @Nipheris Куратор тега C++
    SelectedRows - это коллекция DataGridViewSelectedRowCollection, а она реализует только не-generic IEnumerable, который при перечислении возвращает System::Object-ы. Поэтому делайте for each (System::Object^ item in dataGridView->SelectedRows) и затем кастуйте к строке явно.
    Ответ написан
    Комментировать
  • Как в Visual Studio Online сделать две ветки - dev и stable?

    А что же вам конкретно не понятно? Папку можно преобразовать в бранч, что вам и нужно сделать сначала с основной веткой, а затем для каждого релиза делать отдельную ветвь от основной. Стратегии разные есть, по ссылкам что вы дали это написано все. Вам нужно текущее содержимое проекта переместить в одну папку, например Master или Main и преобразовать ее в ветвь.
    Да, кстати, зачем вам packages в репозитории? Автоматическим восстановлением не пользуетесь?
    Ответ написан
  • Как запустить код Console Application из Windows Form Application?

    Nipheris
    @Nipheris Куратор тега C#
    > Но хотелось бы чтобы исходный код компилировался и запускался.

    Ну так расставьте правильный билд-ордер для консольного приложения, чтобы оно первым собиралось, и настройте аутпуты для обоих проектов в одну и ту же папку (чтобы рядом экзешники лежали). Потом запускайте Process.Start-ом из текущей директории, как и предложили. Не забудьте настроить, чтобы при запуске Debug-сессии текущая директория устанавливалась в выходную директорию (по дефолту - директория проекта).
    Ответ написан
    Комментировать
  • Кто может подкинуть заданий на с#?

    Nipheris
    @Nipheris Куратор тега C#
    У тебя есть хобби или интересы какие-нибудь помимо программирования? Если есть - это отличный способ попрактиковаться с языком. Подойдет практически все, даже если ты любишь, например, рыбалку - тогда можешь составить интерактивную карту рыбных мест со статистикой ловли. А вообще: если фотография - напиши себе сам пару фильтров для изображений (поработаешь с графикой немного), если звук/музыка - также ищешь библиотеки, которыми можно прочитать файлы, и пробуешь делать простые вещи - изменение громкости, миксинг звуков. Автоматизируй что-нибудь, что тебе нравится, что ты хорошо знаешь, наверняка что нибудь найдешь. Самый крайний вариант всегда есть - персональная база данных для чего-либо. Тут уже вообще все подойдет - и музыка, и видео, и коллекционные значки, и твои личные спортивные рекорды и вообще что угодно. Я советую такой способ, чтобы ты почувствовал, что язык (особенно промышленный) - это инструмент, и нужно получать удовольствие от его использования. И правильный взгляд на вещи у тебя будет. И не перегоришь на третьей по счету бессмысленной задаче. Еще и корешам покажешь, как круто получилось.
    Мож в доту шпилишь или cs? Тогда инф. поддержу мачтей - статистику какую-нибудь, потом еще и интеграцию с сервером/стимом сделаешь.
    Ответ написан
    1 комментарий
  • Передать дочернему процессу CTRL-C в C/C++?

    Nipheris
    @Nipheris Куратор тега C++
    a,b в языке С/С++ вычисляется как b. Вы взяли две константы через запятую в скобки, после чего они начали восприниматься как операция "запятая", результатом которой является второй аргумент. Т.е. если написать a = (67, 23), то в переменную a попадет значение 23. В вашем случае в функцию будет только передан флаг CREATE_NEW_CONSOLE, а вам, судя по мсдн-у, нужно оба, чтобы создать новую группу процессов. Соедините флаги так, как надо было изначально - через операцию логического или, т.е. "|" - и все должно работать. Вместо того, что в скобках, будет так:
    CREATE_NEW_PROCESS_GROUP | CREATE_NEW_CONSOLE

    Edit: Хотя нет, для групп процессов CTRL-C вроде как не поддерживается, попробуйте CTRL-BREAK. И флаги эти взаимоисключающие, судя по докам. CREATE_NEW_PROCESS_GROUP: This flag is ignored if specified with CREATE_NEW_CONSOLE.
    Ответ написан
  • Почему Debug Assertion Failed?

    Nipheris
    @Nipheris Куратор тега C++
    На глаз в коде ошибок в работе с памятью не видно. Могу предложить еще раз внимательно проверить, правильные ли библиотеки кьюта используются. Библиотеки должны соответствовать версии компилятора и рантайма, битности собираемого экзешника и конфигурации сборки (дебаг/релиз). Проверьте, все ли у вас верно подключено. Масса странных плавающих ошибок может появляться, если, например, кьют собран под 2010-ю студию, а используется в проекте с компилятором из 2013-й и наоборот.
    Ответ написан
  • Почему вылетает собраный проект на других компах?

    Nipheris
    @Nipheris Куратор тега C#
    Не сразу увидел ваш коммент о версии студии - в 15-й студии дотнет 4.6, причем в данный момент RC-версия, вам бы лучше переключиться на 4.5.2, но в любом случае и тот и другой на 7-ке не установлен по-дефолту, там только 3.5. Так что если не ставили - надо поставить. Либо ВЫ переключаете свой проект на 3.5, если вам не нужны фичи из 4.0, тогда должно пойти на семерке без доп. телодвижений.
    Ответ написан
    Комментировать
  • Какую студию использовать?

    Nipheris
    @Nipheris Куратор тега C#
    Сидим до сих пор на 2008-й студии (большой проект на C++), пытались перейти года два назад на 2012-ю, но не смогли из-за проблем поддержки продукта под Windows XP - были проблемы с работой рантаймов. Майкрософт их потом вроде пофиксил, но мы уже не стали второй раз пытаться. Теперь ждем, когда пользователи слезут с XP. А в 2012-й только дампы смотрим и профайлимся.

    C .NET-ом в этом плане намного проще, в студии сейчас есть возможность выбирать в качестве целевой платформы любой фреймворк, начиная с 2.0, поэтому обновиться в большинстве случаев не проблема.
    Ответ написан
    Комментировать
  • Как реализовать "бегающие" точки?

    Nipheris
    @Nipheris Куратор тега C#
    Вопрос действительно академический: вам нужно основательно разобраться с событийно-управляемой (event-driven) архитектурой приложений. Пожалуй, все современные графические подсистемы так или иначе построены на ней (а вообще - не только графические). И в первую очередь нужно понять, что выполнение действий в своем цикле без передачи управления обработчикам сообщений - неверный подход. Дело в том, что GUI-приложение, в отличие от консольного, для того чтобы "не зависать", должно постоянно выполнять некоторые действия помимо нужных для вашей задачи, а именно - перерисовываться, обрабатывать события клавиатуры и мыши и т.д. Изза того что ваша программа "крутится" в цикле, то все те стандартные обработчики событий, которые должны получать управление, не получают его. Поэтому, если нужно выполнять интенсивные вычисления в графическом приложении, нужно либо:
    а) выполнять их в другом потоке - тогда получится сохранить структуру приложения и циклы, но встанет задача межпоточной передачи данных;
    б) выполнять работу порционно, время от времени передавая управления обработчикам системных событий. Это т.н. вызов DoEvents, в разных API он разный, но суть одна и та же.

    Конкретно для вашей задачи цикл на самом деле совершенно не нужен - вся анимация, какой бы они ни была, в современных приложениях (старые DOSовские игры не в счет) строится на таймерах и событиях их срабатывания. Поэтому вам нужно разобраться, как пользоваться в вашей среде таймерами и генерировать периодические события, и уже в обработчике события таймера делать label1.Text = "." , ".." , "..." в зависимости от того, какой "кадр" был предыдущий.
    Ответ написан
    Комментировать
  • Как запустить проект С# на другом пк?

    Nipheris
    @Nipheris Куратор тега C#
    Во-первых, как уже отметил GavriKos, соберите проект в Release-конфигурации - exe-шник, собранный в релизе, будет оптимизирован не для отладки, а для использования в продакшене. Во-вторых, определитесь с версиями Винды, на которых будете запускать проект - с 7-кой идет .net 3.5 (включающий в себя 3.0 и 2.0), c 8-кой - 4.5 (который включает в себя 4.0). Если попали в эти пары версия ОС/версия .net - то отдельно фреймворк ставить не надо, если не попали (например, ваше приложение под .net 4.5 нужно запустить на семерке), то тогда нужно получить инсталлятор с microsoft.com и установить на целевую машину. В-третьих, не забудьте с экзешником приложить все зависимости - если вы использовали какие-то библиотеки, то их сборки должны лежать вместе с exe. В общем все, остальное уже специфично для конкретного приложения. Для целей тестирования, если нужно свести риски незапуска к минимуму, могу посоветовать поднять чистую виртуалку с соотв. версией винды, и попытаться запустить там приложение в том виде, в котором вы его подготовили. Тогда станет понятно, что не учли и что нужно еще поставить.
    Ответ написан
    Комментировать