Как включить clr в visual studio
Позволяет приложениям и компонентам использовать функции среды CLR и выполнять компиляцию C++/CLI.
Синтаксис
/clr [ : Параметры]
Аргументы
options
Один или несколько из следующих аргументов с разделителями-запятыми.
При отсутствии параметров /clr создает метаданные для компонента. Метаданные могут использоваться другими приложениями CLR и позволяют компоненту использовать типы и данные в метаданных других компонентов среды CLR. Дополнительные сведения см. в статье Смешанные (собственные и управляемые) сборки.
netcore
nostdlib
Указывает компилятору игнорировать каталог по умолчанию \clr . Компилятор выдает ошибки при включении нескольких версий библиотеки DLL, например System.dll. Этот параметр позволяет указать конкретную платформу для использования во время компиляции.
pure
safe
noAssembly
/clr:noAssembly не рекомендуется к использованию. Вместо этого используйте /LN (создать модуль MSIL) .
Указывает компилятору не вставлять манифест сборки в выходной файл. По умолчанию noAssembly параметр не действует.
Управляемая программа, не имеющая метаданных сборки в манифесте, называется модулем. noAssembly Параметр можно использовать только для создания модуля. Если компиляция выполняется с помощью /c и /clr:noAssembly , то для создания модуля необходимо указать /NOASSEMBLY параметр на этапе компоновщика.
до Visual Studio 2005 /clr:noAssembly требуется /LD . /LD Теперь подразумевается при указании /clr:noAssembly .
initialAppDomain
Remarks
Управляемый код — это код, который может проверяться и УПРАВЛЯТЬся средой CLR. Управляемый код может обращаться к управляемым объектам. Дополнительные сведения см. в разделе /clr ограничения.
Сведения о разработке приложений, которые определяют и потребляют управляемые типы в C++, см. в разделе расширения компонентов для платформ среды выполнения.
Приложение, скомпилированное с использованием /clr , может не содержать управляемые данные.
Сведения о включении отладки в управляемом приложении см. в разделе /ASSEMBLYDEBUG (Add DebuggableAttribute).
В куче с сбором мусора создаются экземпляры только типов CLR. Дополнительные сведения см. в статье Классы и структуры. Для компиляции функции в машинный код используйте директиву unmanaged pragma. Дополнительные сведения см. в разделе managed , unmanaged .
По умолчанию /clr не действует. Если /clr действует, /MD действует также и. Дополнительные сведения см. в разделе /MD , /LD /MT (использование библиотеки Run-Time). /MD гарантирует, что в стандартных файлах заголовков выбираются динамически связываемые многопоточные версии подпрограмм среды выполнения. Многопоточность необходима для управляемого программирования, так как сборщик мусора CLR запускает методы завершения во вспомогательном потоке.
При компиляции с помощью /c служб можно указать тип CLR выходного файла с помощью /CLRIMAGETYPE параметра компоновщика.
/clr подразумевает /EHa , что другие /EH параметры для /clr не поддерживаются. Дополнительные сведения см. в разделе /EH (модель обработки исключений).
Сведения о том, как определить тип образа среды CLR для файла, см. в разделе /CLRHEADER .
Все модули, передаваемые в данный вызов компоновщика, должны быть скомпилированы с помощью одного и того же параметра компилятора библиотеки времени выполнения ( /MD или /LD ).
/ASSEMBLYRESOURCE Используйте параметр компоновщика для внедрения ресурса в сборку. /DELAYSIGN параметры компоновщика, /KEYCONTAINER и /KEYFILE позволяют настроить способ создания сборки.
Если /clr используется, _MANAGED символ определяется как 1. Дополнительные сведения см. в разделе стандартные макросы.
Метаданные и неименованные классы
Неименованные классы отображаются в метаданных под именами, например $UnnamedClass$$$ , где — это последовательный счетчик неименованных классов в компиляции. Например, следующий код создает неименованный класс в метаданных.
Для просмотра метаданных используйте ildasm.exe.
Установка данного параметра компилятора в среде разработки Visual Studio
Задайте для раскрывающегося списка Конфигурация значение все конфигурациии задайте для раскрывающегося списка платформа значение все платформы.
Выберите страницу Свойства> конфигурацииC/C++>Общие .
Измените свойство Поддержка среды CLR . Выберите ОК для сохранения внесенных изменений.
в интегрированной среде разработки /clr Visual Studio параметр компилятора можно настроить отдельно на странице свойства> конфигурацииC/C++>общие диалогового окна страницы свойств. Однако мы рекомендуем использовать шаблон CLR для создания проекта. Он задает все свойства, необходимые для успешного создания компонента среды CLR. Другим способом установки этих свойств является использование свойства Поддержка среды CLR на странице свойства> конфигурацииДополнительно диалогового окна страницы свойств. Это свойство задает одновременно все прочие параметры средств, связанных со средой CLR.
шаблон консольного приложения CLR в диалоговом окне New Project можно использовать для создания проекта консольного приложения, в котором уже есть важный набор ссылок и файлов проекта.
шаблон консольного приложения CLR можно использовать в диалоговом окне создание Project , чтобы создать проект консольного приложения, в котором уже есть ключевые ссылки и файлы проекта.
Как правило, консольное приложение компилируется в автономный исполняемый файл, но не имеет графического интерфейса пользователя. Пользователи запускают консольное приложение из командной строки. Они могут использовать командную строку для выполнения инструкций в работающем приложении. Приложение предоставляет выходные данные в виде текста в командном окне. Немедленная обратная связь консольного приложения делает его отличным средством для обучения программированию. Не нужно беспокоиться о том, как реализовать графический пользовательский интерфейс.
При создании проекта с помощью шаблона консольного приложения CLR автоматически добавляются следующие ссылки и файлы:
System, System.Data , System.Xml : Эти ссылки содержат фундаментальные классы, определяющие часто используемые типы, события, интерфейсы, атрибуты и исключения.
ConsoleApplicationName.cpp : Основной исходный файл и точка входа в приложение. Этот файл содержит базовое имя, указанное для проекта. Он определяет DLL-файл проекта и пространство имен проекта. В этом файле содержится разработанный вами код.
AssemblyInfo.cpp : Содержит атрибуты и параметры, которые можно использовать для изменения метаданных сборки проекта. Дополнительные сведения см. в разделе содержимое сборки.
stdafx.cpp : Используется для создания файла предкомпилированного заголовка с именем ConsoleApplicationName.pch и файла предкомпилированных типов с именем stdafx.obj .
stdafx.h : Используется для создания файла предкомпилированного заголовка с именем ConsoleApplicationName.pch и файла предкомпилированных типов с именем stdafx.obj .
resource.h : Созданный включаемый файл для app.rc .
app.rc : Файл описания ресурсов программы.
app.ico — Файл значка программы.
ReadMe.txt : Описывает файлы в проекте.
При создании проекта с помощью шаблона консольного приложения CLR автоматически добавляются следующие ссылки и файлы:
System, System.Data , System.Xml : Эти ссылки содержат фундаментальные классы, определяющие часто используемые типы, события, интерфейсы, атрибуты и исключения.
ConsoleApplicationName.cpp : Основной исходный файл и точка входа в приложение. Этот файл содержит базовое имя, указанное для проекта. Он определяет DLL-файл проекта и пространство имен проекта. В этом файле содержится разработанный вами код.
AssemblyInfo.cpp : Содержит атрибуты и параметры, которые можно использовать для изменения метаданных сборки проекта. Дополнительные сведения см. в разделе содержимое сборки.
pch.cpp : Используется для создания файла предкомпилированного заголовка с именем ConsoleApplicationName.pch и файла предкомпилированных типов с именем pch.obj .
pch.h : Используется для создания файла предкомпилированного заголовка с именем ConsoleApplicationName.pch и файла предкомпилированных типов с именем pch.obj .
Resource.h : Созданный включаемый файл для app.rc .
app.rc : Файл описания ресурсов программы.
app.ico — Файл значка программы.
Создание проекта консольного приложения CLR
В строке меню выберите Файл>Создать>Проект.
в диалоговом окне создание Project выберите установленные>шаблоны>Visual C++> узелclr , а затем выберите шаблон консольное приложение clr .
В поле Имя введите уникальное имя для приложения.
Можно указать другие параметры проекта и решения, но они не являются обязательными.
В строке меню выберите Файл>Создать>Проект.
в диалоговом окне создание Project выберите установленный>Visual C++> узелclr , а затем выберите шаблон консольное приложение clr .
В поле Имя введите уникальное имя для приложения.
Можно указать другие параметры проекта и решения, но они не являются обязательными.
В строке меню выберите Файл>Создать>Проект.
В поле Имя введите уникальное имя для приложения.
Можно указать другие параметры проекта и решения, но они не являются обязательными.
Известные проблемы, связанные с компиляцией проектов библиотеки с параметром /clr
Visual Studio содержит некоторые известные проблемы при компиляции проектов библиотек с помощью /clr:
Код может запрашивать типы во время выполнения с помощью CRuntimeClass::FromName. Однако если тип находится в .dll MSIL (скомпилированном с параметром /clr), вызов FromName может завершиться ошибкой, если он происходит до запуска статических конструкторов в управляемом .dll (эта проблема не возникает, если вызов FromName происходит после выполнения кода в управляемом .dll). Чтобы обойти эту проблему, можно принудительно создать управляемый статический конструктор, определив функцию в управляемом .dll, экспортируя ее и вызывая ее из собственного приложения MFC. Пример:
Компиляция с помощью Visual C++
Прежде чем использовать /clr для любого модуля в проекте, сначала скомпилируйте и свяжите собственный проект с Visual Studio 2010.
Следующие шаги, описанные в порядке, предоставляют самый простой путь к компиляции /clr . Важно скомпилировать и запустить проект после каждого из этих шагов.
Версии до Visual Studio 2003
При обновлении до Visual Studio 2010 с версии до Visual Studio 2003 могут возникнуть ошибки компилятора, связанные с улучшенным соответствием стандарта C++ в Visual Studio 2003 г.
Обновление с Visual Studio 2003 г.
Предыдущие созданные проекты с Visual Studio 2003 также должны быть скомпилированы без /clr, так как Visual Studio теперь увеличило соответствие ANSI/ISO и некоторые критические изменения. Изменение, которое, скорее всего, потребует наибольшего внимания, — это функции безопасности в CRT. Код, использующий CRT, может привести к выводу предупреждений об устаревании. Эти предупреждения можно отключить, но миграция на новые версии функций CRT с расширенными безопасностью предпочтительнее, так как они обеспечивают более высокую безопасность и могут выявить проблемы безопасности в коде.
Обновление с управляемые расширения для C++
Начиная с Visual Studio 2005 года код, написанный с помощью управляемые расширения для C++, не будет компилироваться в /clr.
Преобразование кода C в C++
Хотя Visual Studio компилирует файлы C, их необходимо преобразовать в C++ для компиляции /clr. Фактическое имя файла не должно быть изменено; можно использовать /Tp (см. раздел /Tc, /Tp, /TC, /TP (указание типа исходного файла)).) Обратите внимание, что хотя файлы исходного кода C++ требуются для /clr, не нужно повторно факторировать код для использования объектно-ориентированных парадигм.
Код C, скорее всего, потребует изменений при компиляции в виде файла C++. Правила безопасности типов C++ строги, поэтому преобразования типов должны быть явными с помощью приведения. Например, malloc возвращает указатель void, но может быть назначен указателю на любой тип в C с приведением:
Указатели функций также строго типобезопасны в C++, поэтому следующий код C требует изменения. В C++ рекомендуется создать тип typedef указателя функции, а затем использовать его для приведения указателей функций:
C++ также требует, чтобы функции были прототипами или полностью определены, прежде чем их можно будет ссылаться или вызывать.
Идентификаторы, используемые в коде C, которые могут быть ключевыми словами в C++ (например virtual , , new , delete , bool , true false и т. д.), должны быть переименованы. Обычно это можно сделать с помощью простых операций поиска и замены.
Перенастройка Project Параметры
После компиляции и запуска проекта в Visual Studio 2010 необходимо создать новые конфигурации проекта для /clr, а не изменять конфигурации по умолчанию. /clr несовместим с некоторыми параметрами компилятора и созданием отдельных конфигураций позволяет создавать проект как собственный или управляемый. Если параметр /clr выбран в диалоговом окне страниц свойств, параметры проекта, несовместимые с /clr , отключены (и отключенные параметры не восстанавливаются автоматически, если /clr впоследствии не выбран).
Создание конфигураций Project
С помощью параметра "Копировать Параметры Из" в диалоговом окне "Новая конфигурация Project" (Build>Configuration Manager>Active SolutionConfigurationNew>) можно создать конфигурацию проекта на основе существующих параметров проекта. Выполните это один раз для конфигурации отладки и один раз для конфигурации выпуска. Последующие изменения можно применить только к конфигурациям /clr , оставляя исходные конфигурации проекта без изменений.
Для проектов, использующих пользовательские правила сборки, может потребоваться дополнительное внимание.
Этот шаг имеет различные последствия для проектов, использующих файлы makefile. В этом случае можно настроить отдельный целевой объект сборки или версию, конкретную для компиляции /clr , можно создать из копии исходного файла.
Изменение Project Параметры
/clr можно выбрать в среде разработки, следуя инструкциям в разделе /clr (компиляция среды CLR). Как упоминалось ранее, этот шаг автоматически отключает конфликтующие параметры проекта.
При обновлении управляемой библиотеки или проекта веб-службы с Visual Studio 2003 параметр компилятора /Zl будет добавлен на страницу свойств командной строки. Это приведет к тому, что LNK2001. Удалите /Zl со страницы свойств командной строки для разрешения. Дополнительные сведения см. в разделе /Zl (опустить имя библиотеки по умолчанию) и задать компилятор и свойства сборки . Кроме того, добавьте msvcrt.lib и msvcmrt.lib в свойство дополнительных зависимостей компоновщика.
Для проектов, созданных с помощью файлов makefile, несовместимые параметры компилятора должны быть отключены вручную после добавления /clr . Сведения о параметрах компилятора, несовместимых с //clr, см. в разделе //clr.
Предкомпилированные заголовочные файлы
Предварительно скомпилированные заголовки поддерживаются в /clr. Однако если вы компилируете только некоторые файлы CPP с параметром /clr (компиляция остальных в собственном коде), некоторые изменения потребуются, так как предварительно скомпилированные заголовки, созданные с помощью /clr , несовместимы с созданными без /clr. Эта несовместимость обусловлена тем, что /clr создает и требует метаданных. Модули, скомпилированные /clr , поэтому не могут использовать предварительно скомпилированные заголовки, которые не содержат метаданные, а модули /clr не могут использовать предварительно скомпилированные файлы заголовков, которые содержат метаданные.
Самый простой способ скомпилировать проект, в котором некоторые модули компилируются /clr , — полностью отключить предварительно скомпилированные заголовки. (В диалоговом окне страниц свойств проекта откройте узел C/C++ и выберите предварительно скомпилированные заголовки. Затем измените свойство Create/Use Precompiled Headers на "Not Using Precompiled Headers".)
Тем не менее, особенно для крупных проектов, предварительно скомпилированные заголовки обеспечивают гораздо большую скорость компиляции, поэтому отключение этой функции нежелательно. В этом случае рекомендуется настроить файлы /clr и non /clr для использования отдельных предварительно скомпилированных заголовков. Это можно сделать одним шагом, выбрав модули для компиляции /clr с помощью Обозреватель решений, щелкнув группу правой кнопкой мыши и выбрав "Свойства". Затем измените свойства файла create/Use PCH Through File и Precompiled Header File, чтобы использовать другое имя файла заголовка и PCH-файл соответственно.
Устранение ошибок
Компиляция с помощью /clr может привести к ошибкам компилятора, компоновщика или среды выполнения. В этом разделе рассматриваются наиболее распространенные проблемы.
Слияние метаданных
Различные версии типов данных могут привести к сбою компоновщика, так как метаданные, созданные для двух типов, не совпадают. (Обычно это вызвано тем, что члены типа определяются условно, но условия не совпадают для всех файлов CPP, использующих тип.) В этом случае компоновщик завершается ошибкой, сообщая только имя символа и имя второго OBJ-файла, в котором был определен тип. Часто полезно сменить порядок отправки OBJ-файлов компоновщику для обнаружения расположения другой версии типа данных.
Взаимоблокировка блокировки загрузчика
"Взаимоблокировка блокировки загрузчика" может возникать, но детерминирована и обнаруживается и сообщается во время выполнения. Подробные сведения о инициализации смешанных сборок, рекомендации и решения см. в разделе "Инициализация смешанных сборок ".
Экспорт данных
Видимость типов
Собственные типы являются частными по умолчанию. Это может привести к тому, что собственный тип не отображается за пределами библиотеки DLL. Устраните эту ошибку, добавив public эти типы.
Проблемы с плавающей запятой и выравниванием
__controlfp не поддерживается в среде CLR (дополнительные сведения см. в разделе _control87, _controlfp, __control87_2 ). Среда CLR также не будет соблюдать соответствие.
Инициализация COM
Среда CLR инициализирует COM автоматически при инициализации модуля (когда COM инициализируется автоматически, это делается как MTA). В результате явное инициализация COM возвращает коды возврата, указывающие на то, что COM уже инициализирован. Попытка явно инициализировать COM с помощью одной модели потоков, если среда CLR уже инициализировала COM в другую модель потоков, может привести к сбою приложения.
Среда CLR запускает COM как MTA по умолчанию; Используйте параметр /CLRTHREADATTRIBUTE (set CLR Thread Attribute) для изменения этого параметра.
Проблемы с производительностью
Вы можете увидеть снижение производительности, когда собственные методы C++, созданные для MSIL, вызываются косвенно (вызовы виртуальных функций или использование указателей функций). Дополнительные сведения об этом см. в разделе Double Thunking.
При переходе с собственного кода на MSIL вы заметите увеличение размера рабочего набора. Это связано с тем, что среда CLR предоставляет множество функций, чтобы обеспечить правильную работу программ. Если приложение /clr работает неправильно, может потребоваться включить C4793 (по умолчанию), дополнительные сведения см. в разделе "Предупреждение компилятора" (уровень 1 и 3) C4793 .
Сбои программы при завершении работы
В некоторых случаях среда CLR может завершить работу до завершения работы управляемого кода. Использование std::set_terminate и SIGTERM может привести к этому. Дополнительные сведения см. в разделе "Константы сигнала " и set_terminate .
Использование новых функций Visual C++
В статье рассказывается как создать CLR приложение сложения двух чисел в Visual Studio 2015 на C++.
Создание проекта
Подготовка проекта
В отличии от Visual Studio 2010 тут CLR приложения создаются пустыми без формы. Зачем они это сделали — непонятно. Будем добавлять форму самостоятельно.
Щелкаем по проекту правой кнопкой и следуем иллюстрациям:
Вполне возможно, что у вас возникнет вот такая картинка с ошибками:
Ничего страшного. Закройте и откройте форму:
Далее перейдем в файл cpp нашей формы:
Допишем там вот такой код после единственной строчки:
Обратите внимание, что Проект2 — это название вашего проекта в коде выше. Поэтому, если ваш проект называется по другому, то вставьте своё название проекта:
Щелкнем по проекту правой кнопкой и перейдем в его свойства:
В настройках компоновщика нужно в двух местах поменять настройки:
Жмем OK , и мы закончили прикручивать форму к нашему приложению.
Можете запустить приложение и проверить работоспособность. Если приложение скомпилируется и запустится, то всё норм. Иначе проверьте все шаги до этого:
Интерфейс приложения
Перейдем на форму. Можно сделать двумя способами:
Обратите внимание, что код кнопок и сама форма прописывается в h файле, а не cpp .
Перетащите два TextBox на форму, в которые будем записывать наши числа:
Перетащите кнопку на форму:
Перетащите третий TextBox на форму, в которую мы будем выводить информацию:
Однострочные и многострочные текстовые поля задаются одним компонентом. Поэтому мы должны изменить параметры нашего textBox3 , чтобы в нем можно было выводить много строк. Выделим наш textBox3 и изменим его параметры:
Теперь мы можем его растянуть вниз:
Написание кода основной программы
Щелкнете по кнопке двойным кликом:
Мы получили метод, в котором прописываем реакцию на клик нашей мыши:
В фигурных скобках пропишем код нашей программы по считыванию двух чисел, их сложении и выводе результата:
Запуск программы
Я немного поменял размеры компонентов и изменил текст на кнопке. Поэтому ниже на скринах компоненты чуть по другому будут выглядеть:
Получаем наше приложение:
При вводе наших чисел получим вот это:
- Visual Studio
- C++
- Сложение двух чисел
В статье рассказывается как создать CLR приложение сложения двух чисел в Visual Studio 2015 на C++.
В статье рассказывается как создать CLR приложение сложения двух чисел в Visual Studio 2015 на C++.
Harrix
Write an awesome description for your new site here. You can edit this line in _config.yml. It will appear in your document head meta (for Google search results) and in your feed.xml site description.
Шаг 0. А вдруг получится сразу?
В настоящее время IDE, поддерживающих Windows forms, не так много — буквально одна только Visual Studio, более известная как просто "студия". Поэтому будем рассматривать создание и решение проблем именно в этой среде разработки. Первым шагом запустим студию, начнём создавать новый проект и попытаемся найти Windows forms проект для C++:
Если у вас более старая версия Visual Studio, то интерфейс будет выглядеть немного иначе, однако данная функциональность будет той же. Также не исключено, что у Вас может быть данный тип проекта для C++ (на некоторых версиях формы для C++ были доступны сразу после установки IDE). Если же у Вас, как и у нас поиск не дал нужных результатов, то переходим к следующему шагу.
Шаг 1. Создание CLR проекта
Поскольку непосредственно Windows Forms проекта у нас не оказалось, мы обхитрим студию и создадим пустой CLR проект на С++. Для этого в том же окне поиска необходимо найти и выбрать Новый CLR проект , ввести имя (если нужно, то поменять директорию расположения проекта) и немного подождать, пока студия сделает свою работу.
В результате Visual Stido создаст новый C++ CLR проект, который будет выглядеть примерно так:
Шаг 2. Добавить форму
Чтобы сделать CLR проект проектом Windows Forms, нужно просто добавить в него форму. Для этого в верхнем меню нужно выбрать Проект - Добавить новый элемент и в появившемся окне выбрать категорию Visual C++ - UI и затем выбрать Форма Windows Forms .
После данной операции нас ждёт разочарование в виде ошибки Исключение из HRESULT: 0x8000000A :
Шаг 3. Исправляем появившуюся ошибку
Данная ошибка появляется из-за того, что для создания окна формы приложению необходима основная программа, создающая форму и переключающая управление на неё, однако после добавления новой формы файл Form1.cpp предсказуемо создаётся пустым. Поэтому необходимо добавить основную программу в файл с формой:
В результате код файла Form1.cpp будет выглядеть следующим образом:
Шаг 4. Переоткрыть проект
Всё, что теперь осталось сделать — это закрыть текущее решение, а затем открыть его снова. Для этого можно закрыть саму студию, а можно выбрать в верхнем меню Файл - Закрыть решение , после чего в появившемся окне выбрать только что созданный проект и открыть его заново.
Благодаря добавленному коду основной программы, студия сможет создать форму и на экране появится изображение формы, на которую можно будет добавлять компоненты, задавать их свойства, а также свойства самой формы.
Выпускник МГУ им. М.В. Ломоносова
Programforyou — это сообщество, в котором Вы можете подтянуть свои знания по программированию, узнать, как эффективно решать те или иные задачи, а также воспользоваться нашими онлайн сервисами.
Читайте также: