C и C++ в Visual Studio
Эта документация для разработчиков применима к Visual Studio 2022. Чтобы ознакомиться с документацией по предпочтительной версии Visual Studio, используйте селектор Версия. Он находится в верхней части оглавления на этой странице.
Если вы ищете Распространяемый компонент Microsoft Visual C++, чтобы можно было запустить программу, ознакомьтесь с последними поддерживаемыми версиями Visual C++.
Эта документация для разработчиков применима к Visual Studio 2019. Чтобы ознакомиться с документацией по предпочтительной версии Visual Studio, используйте селектор Версия. Он находится в верхней части оглавления на этой странице.
Если вы ищете Распространяемый компонент Microsoft Visual C++, чтобы можно было запустить программу, ознакомьтесь с последними поддерживаемыми версиями Visual C++.
Эта документация для разработчиков применима к Visual Studio 2017. Чтобы ознакомиться с документацией по предпочтительной версии Visual Studio, используйте селектор Версия. Он находится в верхней части оглавления на этой странице.
Если вы ищете Распространяемый компонент Microsoft Visual C++, чтобы можно было запустить программу, ознакомьтесь с последними поддерживаемыми версиями Visual C++.
Эта документация для разработчиков применима к Visual Studio 2015. Чтобы ознакомиться с документацией по предпочтительной версии Visual Studio, используйте селектор Версия. Он находится в верхней части оглавления на этой странице.
Если вы ищете Распространяемый компонент Microsoft Visual C++, чтобы можно было запустить программу, ознакомьтесь с последними поддерживаемыми версиями Visual C++.
Microsoft Visual C++ (MSVC) — это набор библиотек и средств разработки на языках ассемблера, C++ и C, которые входят в состав Visual Studio в Windows. Эти средства и библиотеки позволяют создавать собственные классические и серверные приложения Windows, универсальная платформа Windows приложения (UWP) или управляемые приложения и библиотеки, использующие платформа .NET Framework. Создание кроссплатформенных библиотек и приложений, работающих в Windows, Linux, Android и iOS. MSVC можно использовать для написания чего угодно— от простых консольных приложений до самых сложных и сложных приложений для настольных компьютеров Windows. Написание драйверов устройств и компонентов операционной системы или кроссплатформенных игр для мобильных устройств. Нацеливайся на самые маленькие устройства Интернета вещей на многосерверные высокопроизводительные вычисления в облаке Azure.
Visual Studio 2015, 2017, 2019 и 2022 можно установить параллельно. С помощью Visual Studio 2019 (набор средств компилятора версии 142) или Visual Studio 2017 (набор средств компилятора версии 141) можно редактировать и компилировать программы, используя набор средств из Visual Studio 2017 (версия 141) и Visual Studio 2015 (версия 140).
Новые возможности C++ в Visual Studio
Новые возможности C++ в Visual Studio 2022
Узнайте о новых возможностях Visual Studio 2022.
Новые возможности C++ в Visual Studio 2019
Узнайте о новых возможностях Visual Studio 2019.
Новые возможности C++ в Visual Studio 2017
Узнайте о новых возможностях Visual Studio 2017.
Новые возможности C++ в версиях Visual Studio с 2003 по 2015
Новые возможности C++ для каждой версии Visual Studio с 2003 до 2015.
Улучшения соответствия C++ в Visual Studio
Сведения об улучшениях соответствия C++ в Visual Studio.
Соответствие стандартам языка Microsoft C/C++
Находите сведения о состоянии соответствия языка на уровне функций в компиляторе MSVC по версии Visual Studio.
Журнал изменений Microsoft C/C++ в версиях с 2003 по 2015
Ознакомьтесь с критическими изменениями в предыдущих версиях.
Установка Visual Studio С++ и обновление с более ранних версий
Установка поддержки С++ в Visual Studio
Скачайте Visual Studio и установите набор инструментов Microsoft C/C++.
Руководство по переносу и обновлению Microsoft C++
Руководство по переносу кода и обновлению проектов до Visual Studio 2015 или более поздней версии. Воспользуйтесь преимуществами большего соответствия компилятора стандарту C++, значительно улучшайте время компиляции и функции безопасности, такие как устранение рисков Spectre.
Поддерживаемые платформы
Узнайте, какие платформы поддерживаются компилятором Microsoft C/C++.
Обучение работе с С++ с использованием Visual Studio
Возвращение к C++
Дополнительные сведения о современных методах программирования на C++ на основе C ++ 11 и более поздних версий для написания быстродействующего и безопасного кода и исключения многих типичных ошибок программирования в стиле C.
Стандартный C++
Дополнительные сведения о C++, обзор современного C++ и ссылки на книги, статьи, обсуждения и данные о событиях
Примеры кода Visual Studio C++
Сведения о примерах кода C++, предоставленных корпорацией Майкрософт.
Средства разработки Visual Studio C/C++
Общие сведения о разработке на C++ в Visual Studio
Использование интегрированной среды разработки Visual Studio для создания проектов, редактирования кода, создания ссылок на библиотеки, компиляции, отладки, создания модульных тестов, выполнения статического анализа, развертывания и многого другого.
Проекты и системы сборки
Как создать и настроить проекты Visual Studio C++, проекты CMake и другие типы проектов с помощью компилятора MSVC и параметров компоновщика.
Написание и рефакторинг кода C++
Как использовать функции производительности в редакторе C++ для рефакторинга, понимания и написания кода и перемещения по нему.
Отладка машинного кода
Сведения об использовании отладчика Visual Studio с проектами C++.
Общие сведения об анализе кода в C/C++
Используйте заметки SAL или средства проверки C++ Core Guidelines для выполнения статического анализа.
Написание модульных тестов для C/C++ в Visual Studio
Создание модульных тестов с помощью платформы модульного тестирования Майкрософт для C++, Google Test, Boost.Test или CTest.
Создание приложений C/C++ с использованием Visual Studio
Классические приложения (C++)
Сведения о создании классических приложений с машинным кодом на C++ для Windows.
Программирование .NET с использованием C++/CLI
Сведения о создании библиотек DLL, обеспечивающих взаимодействие между машинным кодом на C++ и программами .NET, написанными на таких языках, как C# или Visual Basic.
Универсальные приложения Windows (C++)
Руководства и справочные материалы в Центре разработчика Windows. Сведения о разработке приложений UWP см. в разделах Введение в универсальную платформу Windows и Создание первого приложения UWP на C++.
Программирование для Linux
Интегрированная среда разработки Visual Studio позволяет написать код и развернуть его на удаленном компьютере с ОС Linux для компиляции с помощью GCC.
Создание библиотек DLL C/C++ в Visual Studio
Узнайте, как использовать Win32, ATL и MFC для создания классических библиотек DLL Windows. Содержит сведения о компиляции и регистрации библиотеки DLL.
Параллельное программирование
Использование библиотеки параллельных шаблонов, C++ AMP, OpenMP и других компонентов, связанных с многопоточностью в Windows.
Лучшие методики обеспечения безопасности
Защита приложений от вредоносного кода и несанкционированного использования.
Облачное и веб-программирование
В C++ имеются несколько параметров для соединения с веб-узлом и облаком.
Доступ к данным
Подключение к базам данных через ODBC и OLE DB.
Текст и строки
Подробнее о работе с другими форматами текста и строк и кодировках для локальных и международных разработок.
Справочник по языку C++
Справочник по языку C++
Справочное руководство по языку программирования C++ в реализации Майкрософт.
Справочник по языку C
Справочное руководство по языку программирования C в реализации Майкрософт.
Справочник по препроцессору в C/C++
Общий справочник по препроцессору, который используется для языков C и C++.
Справочник по языку C++/CX
Справочное руководство по расширениям Microsoft для языка C++ для создания приложений универсальной платформы Windows C++, компонентов среды выполнения Windows C++, которые могут использоваться приложениями Windows на основе JavaScript, а также игр Windows DirectX и приложений с интенсивным использованием графики.
Справочник по языку C++/CLI
Стандарт ECMA для языка программирования C++/CLI.
Внутренние объекты компилятора и язык ассемблера
Руководства по встроенным функциям компилятора, которые поддерживаются или реализованы в компиляторах Microsoft C/C++ для каждой платформы.
Библиотеки C/C++, доступные в Visual Studio
В следующих разделах приведены сведения о различных библиотеках C и C++, включенных в Visual Studio.
Справочник по библиотеке времени выполнения C
Включает альтернативы с улучшенной безопасностью для функций, которые, как известно, могут представлять угрозу безопасности.
Библиотеки Microsoft Foundation Class (MFC)
Поддержка создания классических приложений с традиционными пользовательскими интерфейсами или интерфейсами в стиле Office.
Библиотека параллельных шаблонов
Асинхронные и параллельные алгоритмы, выполняемые в ЦП.
Библиотека шаблонов среды выполнения Windows (WRL)
Приложения и компоненты универсальной платформы Windows (UWP).
Программирование .NET с использованием C++/CLI
Программирование для общеязыковой среды выполнения (CLR).
Использование сторонних библиотек С++ с открытым кодом в Visual Studio
Кроссплатформенная программа командной строки vcpkg значительно упрощает обнаружение и установку более чем 900 библиотек C++ с открытым исходным кодом. Дополнительные сведения см. на странице о vcpkg.
Visual Studio С++ — отзывы и сообщество
Microsoft Learn Q&A
Microsoft Learn размещает форумы с поиском вопросов и ответов. Добавьте тег C++ в сообщение, чтобы получить помощь сообщества по вопросам, связанным с C++.
Как сообщить о проблеме с набором инструментов Microsoft C/C++
Узнайте о создании эффективных отчетов об ошибках с использованием набора инструментов Microsoft C/C++ (компилятора, компоновщика или других средств) и информация о способах отправки отчета.
Блог группы разработчиков по C++ (Майкрософт)
Описание новых возможностей и актуальная информация от разработчиков инструментов C++ в Visual Studio.
Сообщество разработчиков Visual Studio (C++)
Получите помощь, сообщите об ошибках или оставьте предложения по использованию C++ в Visual Studio.
Руководство. Создание библиотеки классов .NET с помощью Visual Studio
В этом учебнике вы создадите простую библиотеку классов с одним методом для обработки строк.
Библиотека классов определяет типы и методы, которые могут быть вызваны из любого приложения. Если библиотека предназначена для .NET Standard 2.0, она может быть вызвана любой реализацией .NET (включая .NET Framework), которая поддерживает .NET Standard 2.0. Если библиотека предназначена для .NET 8, она может вызываться любым приложением, предназначенным для .NET 8. В этом руководстве показано, как использовать .NET 8.
Когда вы завершите создание библиотеки классов, можете распространить ее как пакет NuGet или включить как компонент в состав приложения, в котором она используется.
Предварительные условия
- Предварительная версия Visual Studio 2022 с установленной рабочей нагрузкой разработки классических приложений .NET. Пакет SDK для .NET 8 устанавливается автоматически при выборе этой рабочей нагрузки. См. раздел Установка пакета SDK для .NET с помощью Visual Studio.
Создание решения
Начните с создания пустого решения для размещения проекта библиотеки классов. Решение Visual Studio служит контейнером для одного или нескольких проектов. Вы будете добавлять дополнительные связанные проекты в одно решение.
Чтобы создать пустое решение, сделайте следующее:
- Запустите среду Visual Studio.
- На начальном экране выберите Создать проект.
- В поле поиска на странице Создание проекта введите решение. Выберите шаблон Пустое решение и нажмите кнопку Далее.
- На странице Настройка нового проекта введите ClassLibraryProjects в поле Имя решения. Щелкните Создать.
Создание проекта библиотеки классов

- Добавьте в решение новый проект библиотеки классов .NET с именем «StringLibrary».
- Щелкните решение в обозревателе решений правой кнопкой мыши и выберите Добавить>Новый проект.
- На странице добавления нового проекта введите в поле поиска библиотека. Выберите C# или Visual Basic из списка языков, а затем — Все платформы из списка платформ. Выберите шаблон Библиотека классов, а затем нажмите кнопку Далее.
- На странице настройки нового проекта введите StringLibrary в поле Имя проекта, а затем нажмите Далее.
- На странице «Дополнительные сведения» выберите .NET 8 (предварительная версия) и нажмите кнопку «Создать«.
- Проверьте, предназначена ли библиотека для правильной версии .NET. В обозревателе решений щелкните проект библиотеки правой кнопкой мыши и выберите пункт Свойства. Текстовое поле Target Framework показывает, что проект предназначен для .NET 7.0.
- Если вы используете Visual Basic, удалите текст в поле Корневое пространство имен. Для каждого проекта Visual Basic автоматически создает пространство имен, соответствующее имени проекта. В этом учебнике вы определите пространство имен верхнего уровня с помощью ключевого слова namespace в файле кода.
- Замените код, отображаемый в окне кода, для Class1.cs или Class1.vb следующим текстом, а затем сохраните файл. Если нужный язык не отображается, измените селектор языка в верхней части страницы.
namespace UtilityLibraries; public static class StringLibrary < public static bool StartsWithUpper(this string? str) < if (string.IsNullOrWhiteSpace(str)) return false; char ch = str[0]; return char.IsUpper(ch); >>Imports System.Runtime.CompilerServices Namespace UtilityLibraries Public Module StringLibrary Public Function StartsWithUpper(str As String) As Boolean If String.IsNullOrWhiteSpace(str) Then Return False End If Dim ch As Char = str(0) Return Char.IsUpper(ch) End Function End Module End NamespaceДобавление консольного приложения в решение
Добавьте консольное приложение, использующее библиотеку классов. В приложении пользователю будет предложено ввести строку и сообщить, начинается ли строка с символа верхнего регистра.
- Добавьте к решению новое консольное приложение .NET под названием «Демонстрация».
- Щелкните решение в обозревателе решений правой кнопкой мыши и выберите Добавить>Новый проект.
- На странице Добавить новый проект введите в поле поиска консоль. Выберите C# или Visual Basic из списка языков, а затем — Все платформы из списка платформ.
- Выберите шаблон Консольное приложение и нажмите Далее.
- На странице Настроить новый проект введите Демонстрация в поле Имя проекта. Теперь щелкните Далее.
- На странице «Дополнительные сведения» выберите .NET 8 (предварительная версия) в поле Framework. Щелкните Создать.
using UtilityLibraries; class Program < static void Main(string[] args) < int row = 0; do < if (row == 0 || row >= 25) ResetConsole(); string? input = Console.ReadLine(); if (string.IsNullOrEmpty(input)) break; Console.WriteLine($"Input: "); Console.WriteLine("Begins with uppercase? " + $"<(input.StartsWithUpper() ? "Yes" : "No")>"); Console.WriteLine(); row += 4; > while (true); return; // Declare a ResetConsole local method void ResetConsole() < if (row >0) < Console.WriteLine("Press any key to continue. "); Console.ReadKey(); >Console.Clear(); Console.WriteLine($"Press only to exit; otherwise, enter a string and press :"); row = 3; > > >Imports UtilityLibraries Module Program Dim row As Integer = 0 Sub Main() Do If row = 0 OrElse row >= 25 Then ResetConsole() Dim input As String = Console.ReadLine() If String.IsNullOrEmpty(input) Then Return Console.WriteLine($"Input: : " + $"") row += 3 Loop While True End Sub Private Sub ResetConsole() If row > 0 Then Console.WriteLine("Press any key to continue. ") Console.ReadKey() End If Console.Clear() Console.WriteLine($"Press only to exit; otherwise, enter a string and press :") row = 3 End Sub End Module Добавление ссылки на проект
Изначально новый проект консольного приложения не имеет доступа к библиотеке классов. Чтобы позволить приложению вызывать методы из библиотеки классов, создайте в проекте ссылку на проект библиотеки классов.
- В обозревателе решений щелкните правой кнопкой мыши узел Зависимости проекта ShowCase и выберите команду Добавить ссылку на проект.

- В диалоговом окне Диспетчер ссылок выберите проект StringLibrary, а затем нажмите кнопку ОК.

Выполнить приложение
- В окне Обозреватель решений щелкните правой кнопкой мыши проект ShowCase и выберите команду Назначить запускаемым проектом.

- Нажмите клавиши CTRL + F5 , чтобы скомпилировать и запустить программу без отладки.
- Проверьте, как работает программа: вводите строки и нажимайте клавишу ВВОД . Чтобы выйти, нажмите клавишу ВВОД .

Дополнительные ресурсы
- Разработка библиотек с помощью .NET CLI
- Список версий .NET Standard и поддерживаемых ими платформ
Далее
В этом руководстве вы создали библиотеку классов. В следующем руководстве вы узнаете, как выполнять модульное тестирование библиотеки классов.
Вы также можете пропустить автоматическое модульное тестирование и узнать, как можно распространить библиотеку, создав пакет NuGet:
Либо узнайте, как опубликовать консольное приложение. При публикации консольного приложения из решения, созданного в этом руководстве, библиотека классов публикуется вместе с ним в виде файла DLL.
В этом учебнике вы создадите простую библиотеку классов с одним методом для обработки строк.
Библиотека классов определяет типы и методы, которые могут быть вызваны из любого приложения. Если библиотека предназначена для .NET Standard 2.0, она может быть вызвана любой реализацией .NET (включая .NET Framework), которая поддерживает .NET Standard 2.0. Если библиотека предназначена для .NET 7, ее можно вызвать любым приложением, предназначенным для .NET 7. В этом руководстве показано, как нацелиться на .NET 7.
Когда вы завершите создание библиотеки классов, можете распространить ее как пакет NuGet или включить как компонент в состав приложения, в котором она используется.
Предварительные условия
- Visual Studio 2022 версии 17.4 с установленной рабочей нагрузкой разработки классических приложений .NET. Пакет SDK для .NET 7 устанавливается автоматически при выборе этой рабочей нагрузки. См. раздел Установка пакета SDK для .NET с помощью Visual Studio.
Создание решения
Начните с создания пустого решения для размещения проекта библиотеки классов. Решение Visual Studio служит контейнером для одного или нескольких проектов. Вы будете добавлять дополнительные связанные проекты в одно решение.
Чтобы создать пустое решение, сделайте следующее:

- Запустите среду Visual Studio.
- На начальном экране выберите Создать проект.
- В поле поиска на странице Создание проекта введите решение. Выберите шаблон Пустое решение и нажмите кнопку Далее.
- На странице Настройка нового проекта введите ClassLibraryProjects в поле Имя решения. Щелкните Создать.
Создание проекта библиотеки классов

- Добавьте в решение новый проект библиотеки классов .NET с именем «StringLibrary».
- Щелкните решение в обозревателе решений правой кнопкой мыши и выберите Добавить>Новый проект.
- На странице добавления нового проекта введите в поле поиска библиотека. Выберите C# или Visual Basic из списка языков, а затем — Все платформы из списка платформ. Выберите шаблон Библиотека классов, а затем нажмите кнопку Далее.
- На странице настройки нового проекта введите StringLibrary в поле Имя проекта, а затем нажмите Далее.
- На странице «Дополнительные сведения» выберите .NET 7 (поддержка уровня «Стандартный») и нажмите кнопку «Создать«.
- Проверьте, предназначена ли библиотека для правильной версии .NET. В обозревателе решений щелкните проект библиотеки правой кнопкой мыши и выберите пункт Свойства. Текстовое поле Target Framework показывает, что проект предназначен для .NET 7.0.
- Если вы используете Visual Basic, удалите текст в поле Корневое пространство имен. Для каждого проекта Visual Basic автоматически создает пространство имен, соответствующее имени проекта. В этом учебнике вы определите пространство имен верхнего уровня с помощью ключевого слова namespace в файле кода.
- Замените код, отображаемый в окне кода, для Class1.cs или Class1.vb следующим текстом, а затем сохраните файл. Если нужный язык не отображается, измените селектор языка в верхней части страницы.
namespace UtilityLibraries; public static class StringLibrary < public static bool StartsWithUpper(this string? str) < if (string.IsNullOrWhiteSpace(str)) return false; char ch = str[0]; return char.IsUpper(ch); >>Imports System.Runtime.CompilerServices Namespace UtilityLibraries Public Module StringLibrary Public Function StartsWithUpper(str As String) As Boolean If String.IsNullOrWhiteSpace(str) Then Return False End If Dim ch As Char = str(0) Return Char.IsUpper(ch) End Function End Module End NamespaceДобавление консольного приложения в решение
Добавьте консольное приложение, использующее библиотеку классов. В приложении пользователю будет предложено ввести строку и сообщить, начинается ли строка с символа верхнего регистра.
- Добавьте к решению новое консольное приложение .NET под названием «Демонстрация».
- Щелкните решение в обозревателе решений правой кнопкой мыши и выберите Добавить>Новый проект.
- На странице Добавить новый проект введите в поле поиска консоль. Выберите C# или Visual Basic из списка языков, а затем — Все платформы из списка платформ.
- Выберите шаблон Консольное приложение и нажмите Далее.
- На странице Настроить новый проект введите Демонстрация в поле Имя проекта. Теперь щелкните Далее.
- На странице «Дополнительные сведения» выберите .NET 7 (поддержка со стандартным термином) в поле Framework. Щелкните Создать.
using UtilityLibraries; class Program < static void Main(string[] args) < int row = 0; do < if (row == 0 || row >= 25) ResetConsole(); string? input = Console.ReadLine(); if (string.IsNullOrEmpty(input)) break; Console.WriteLine($"Input: "); Console.WriteLine("Begins with uppercase? " + $"<(input.StartsWithUpper() ? "Yes" : "No")>"); Console.WriteLine(); row += 4; > while (true); return; // Declare a ResetConsole local method void ResetConsole() < if (row >0) < Console.WriteLine("Press any key to continue. "); Console.ReadKey(); >Console.Clear(); Console.WriteLine($"Press only to exit; otherwise, enter a string and press :"); row = 3; > > >Imports UtilityLibraries Module Program Dim row As Integer = 0 Sub Main() Do If row = 0 OrElse row >= 25 Then ResetConsole() Dim input As String = Console.ReadLine() If String.IsNullOrEmpty(input) Then Return Console.WriteLine($"Input: : " + $"") row += 3 Loop While True End Sub Private Sub ResetConsole() If row > 0 Then Console.WriteLine("Press any key to continue. ") Console.ReadKey() End If Console.Clear() Console.WriteLine($"Press only to exit; otherwise, enter a string and press :") row = 3 End Sub End Module Добавление ссылки на проект
Изначально новый проект консольного приложения не имеет доступа к библиотеке классов. Чтобы позволить приложению вызывать методы из библиотеки классов, создайте в проекте ссылку на проект библиотеки классов.
- В обозревателе решений щелкните правой кнопкой мыши узел Зависимости проекта ShowCase и выберите команду Добавить ссылку на проект.

- В диалоговом окне Диспетчер ссылок выберите проект StringLibrary, а затем нажмите кнопку ОК.

Выполнить приложение
- В окне Обозреватель решений щелкните правой кнопкой мыши проект ShowCase и выберите команду Назначить запускаемым проектом.

- Нажмите клавиши CTRL + F5 , чтобы скомпилировать и запустить программу без отладки.
- Проверьте, как работает программа: вводите строки и нажимайте клавишу ВВОД . Чтобы выйти, нажмите клавишу ВВОД .

Дополнительные ресурсы
- Разработка библиотек с помощью .NET CLI
- Список версий .NET Standard и поддерживаемых ими платформ
Далее
В этом руководстве вы создали библиотеку классов. В следующем руководстве вы узнаете, как выполнять модульное тестирование библиотеки классов.
Вы также можете пропустить автоматическое модульное тестирование и узнать, как можно распространить библиотеку, создав пакет NuGet:
Либо узнайте, как опубликовать консольное приложение. При публикации консольного приложения из решения, созданного в этом руководстве, библиотека классов публикуется вместе с ним в виде файла DLL.
В этом учебнике вы создадите простую библиотеку классов с одним методом для обработки строк.
Библиотека классов определяет типы и методы, которые могут быть вызваны из любого приложения. Если библиотека предназначена для .NET Standard 2.0, она может быть вызвана любой реализацией .NET (включая .NET Framework), которая поддерживает .NET Standard 2.0. Если библиотека предназначена для .NET 6, ее можно вызвать с помощью любого приложения, предназначенного для .NET 6. В этом руководстве показано, как выполнить нацеливание на .NET 6.
Когда вы завершите создание библиотеки классов, можете распространить ее как пакет NuGet или включить как компонент в состав приложения, в котором она используется.
Предварительные условия
- Visual Studio 2022, предварительная версия 17.0.0 с установленной рабочей нагрузкой Разработка классических приложений .NET. Пакет SDK для .NET 6 устанавливается автоматически при выборе этой рабочей нагрузки. См. раздел Установка пакета SDK для .NET с помощью Visual Studio.
Создание решения
Начните с создания пустого решения для размещения проекта библиотеки классов. Решение Visual Studio служит контейнером для одного или нескольких проектов. Вы будете добавлять дополнительные связанные проекты в одно решение.
Чтобы создать пустое решение, сделайте следующее:

- Запустите среду Visual Studio.
- На начальном экране выберите Создать проект.
- В поле поиска на странице Создание проекта введите решение. Выберите шаблон Пустое решение и нажмите кнопку Далее.
- На странице Настройка нового проекта введите ClassLibraryProjects в поле Имя решения. Щелкните Создать.
Создание проекта библиотеки классов

- Добавьте в решение новый проект библиотеки классов .NET с именем «StringLibrary».
- Щелкните решение в обозревателе решений правой кнопкой мыши и выберите Добавить>Новый проект.
- На странице добавления нового проекта введите в поле поиска библиотека. Выберите C# или Visual Basic из списка языков, а затем — Все платформы из списка платформ. Выберите шаблон Библиотека классов, а затем нажмите кнопку Далее.
- На странице настройки нового проекта введите StringLibrary в поле Имя проекта, а затем нажмите Далее.
- На странице Дополнительные сведения выберите .NET 6 (долгосрочная поддержка), а затем нажмите Создать.
- Проверьте, предназначена ли библиотека для правильной версии .NET. В обозревателе решений щелкните проект библиотеки правой кнопкой мыши и выберите пункт Свойства. В текстовом поле Целевая платформа указано, что целевой платформой проекта является .NET 6.0.
- Если вы используете Visual Basic, удалите текст в поле Корневое пространство имен. Для каждого проекта Visual Basic автоматически создает пространство имен, соответствующее имени проекта. В этом учебнике вы определите пространство имен верхнего уровня с помощью ключевого слова namespace в файле кода.
- Замените код, отображаемый в окне кода, для Class1.cs или Class1.vb следующим текстом, а затем сохраните файл. Если нужный язык не отображается, измените селектор языка в верхней части страницы.
namespace UtilityLibraries; public static class StringLibrary < public static bool StartsWithUpper(this string? str) < if (string.IsNullOrWhiteSpace(str)) return false; char ch = str[0]; return char.IsUpper(ch); >>Imports System.Runtime.CompilerServices Namespace UtilityLibraries Public Module StringLibrary Public Function StartsWithUpper(str As String) As Boolean If String.IsNullOrWhiteSpace(str) Then Return False End If Dim ch As Char = str(0) Return Char.IsUpper(ch) End Function End Module End NamespaceДобавление консольного приложения в решение
Добавьте консольное приложение, использующее библиотеку классов. В приложении пользователю будет предложено ввести строку и сообщить, начинается ли строка с символа верхнего регистра.
- Добавьте к решению новое консольное приложение .NET под названием «Демонстрация».
- Щелкните решение в обозревателе решений правой кнопкой мыши и выберите Добавить>Новый проект.
- На странице Добавить новый проект введите в поле поиска консоль. Выберите C# или Visual Basic из списка языков, а затем — Все платформы из списка платформ.
- Выберите шаблон Консольное приложение и нажмите Далее.
- На странице Настроить новый проект введите Демонстрация в поле Имя проекта. Теперь щелкните Далее.
- На странице Дополнительные сведения выберите .NET 6 (долгосрочная поддержка) в поле Платформа. Щелкните Создать.
using UtilityLibraries; class Program < static void Main(string[] args) < int row = 0; do < if (row == 0 || row >= 25) ResetConsole(); string? input = Console.ReadLine(); if (string.IsNullOrEmpty(input)) break; Console.WriteLine($"Input: "); Console.WriteLine("Begins with uppercase? " + $"<(input.StartsWithUpper() ? "Yes" : "No")>"); Console.WriteLine(); row += 4; > while (true); return; // Declare a ResetConsole local method void ResetConsole() < if (row >0) < Console.WriteLine("Press any key to continue. "); Console.ReadKey(); >Console.Clear(); Console.WriteLine($"Press only to exit; otherwise, enter a string and press :"); row = 3; > > >Imports UtilityLibraries Module Program Dim row As Integer = 0 Sub Main() Do If row = 0 OrElse row >= 25 Then ResetConsole() Dim input As String = Console.ReadLine() If String.IsNullOrEmpty(input) Then Return Console.WriteLine($"Input: : " + $"") row += 3 Loop While True End Sub Private Sub ResetConsole() If row > 0 Then Console.WriteLine("Press any key to continue. ") Console.ReadKey() End If Console.Clear() Console.WriteLine($"Press only to exit; otherwise, enter a string and press :") row = 3 End Sub End Module Добавление ссылки на проект
Изначально новый проект консольного приложения не имеет доступа к библиотеке классов. Чтобы позволить приложению вызывать методы из библиотеки классов, создайте в проекте ссылку на проект библиотеки классов.
- В обозревателе решений щелкните правой кнопкой мыши узел Зависимости проекта ShowCase и выберите команду Добавить ссылку на проект.

- В диалоговом окне Диспетчер ссылок выберите проект StringLibrary, а затем нажмите кнопку ОК.

Выполнить приложение
- В окне Обозреватель решений щелкните правой кнопкой мыши проект ShowCase и выберите команду Назначить запускаемым проектом.

- Нажмите клавиши CTRL + F5 , чтобы скомпилировать и запустить программу без отладки.
- Проверьте, как работает программа: вводите строки и нажимайте клавишу ВВОД . Чтобы выйти, нажмите клавишу ВВОД .

Дополнительные ресурсы
- Разработка библиотек с помощью .NET CLI
- Список версий .NET Standard и поддерживаемых ими платформ
Далее
В этом руководстве вы создали библиотеку классов. В следующем руководстве вы узнаете, как выполнять модульное тестирование библиотеки классов.
Вы также можете пропустить автоматическое модульное тестирование и узнать, как можно распространить библиотеку, создав пакет NuGet:
Либо узнайте, как опубликовать консольное приложение. При публикации консольного приложения из решения, созданного в этом руководстве, библиотека классов публикуется вместе с ним в виде файла DLL.
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
The .NET documentation is open source. Provide feedback here.
Обратная связь
Отправить и просмотреть отзыв по
Как включить библиотеку в Visual Studio c
Библиотеки на C++ — это наборы кода, написанного кем-то другим. Они избавляют вас от необходимости изобретать велосипед, когда вам нужно реализовать какую-то желаемую функциональность. Вы можете думать о библиотеках как о подключаемом модуле или дополнении, которое дает вам больше возможностей.
Например, я хотел написать программу, способную перемножать две матрицы. Вместо того, чтобы писать код с нуля, я поискал в Интернете библиотеку линейной алгебры на C++, которая содержала функции для умножения матриц. Я нашел библиотеку под названием «Эйген». Я добавил библиотеку в свой проект в интегрированной среде разработки CodeLite и был готов к работе.
Без лишних слов, вот пошаговый процесс добавления внешней библиотеки C++ в ваш проект с помощью интегрированной среды разработки CodeLite и интегрированной среды разработки Visual Studio.
Обратите внимание, что этот процесс будет другим, если вы используете другую IDE для C++, но два основных шага одинаковы для всех IDE:
- Добавить путь к файлам заголовков
- Добавить путь к фактическому коду (т. е. к библиотеке)
Шаг 1. Перейдите на веб-сайт библиотеки.
Например, для библиотеки линейной алгебры Eigen перейдите на эту страницу: Главная страница EigenШаг 2. Загрузите ZIP-файл, содержащий весь код.
Шаг 3. Разархивируйте ZIP-файл на свой компьютер.
Шаг 4. Откройте CodeLite (т. е. вашу IDE)
Шаг 5. Откройте новый проект
Шаг 6. Щелкните правой кнопкой мыши имя проекта и выберите «Настройки».
Шаг 7. Перейдите на вкладку «Компилятор» и добавьте пути включения:
например, папка, содержащая папку с именем «Eigen»… C:\XYZ\eigen-eigen-21301928\
Здесь компилятор может найти файлы .h (т.е. заголовки)Шаг 8. Нажмите Linker и добавьте путь поиска библиотек
например, C:\XYZ\eigen-eigen-21301928\
Путь выше должен быть местом, где компоновщик может найти библиотеки (обычно с суффиксом .a, .dll, .lib, .so)- Статические библиотеки — XYZ.lib для Windows, UNIX/Linux/Max — libXYZ.a
- Динамические библиотеки — XYZ.dll для Windows, Unix/Linux/Mac — libXYZ.so
Шаг 9. Перейдите к файлу main.cc (т. е. ваш файл с исходным кодом. также может быть main.cpp) и добавьте директивы препроцессора вверху исходного файла. Вы можете использовать этот код, чтобы проверить правильность настройки.

Шаг 3. Разархивируйте ZIP-файл на свой компьютер.

Шаг 4. Переместите папку в какой-либо каталог на вашем компьютере.
Я перемещу его в каталог C:\libraries. На данном этапе Эйген идет по следующему пути для меня:

Шаг 5. Откройте Visual Studio.
Шаг 6. Создайте новый проект C++.
Шаг 7. Напишите следующий код в новый исходный файл.
Я назову этот файл main.cpp.
Шаг 8. Нажмите на вкладку «Проект» вверху и перейдите в раздел «Дополнительные включаемые каталоги».
Проект -> Свойства -> C/C++ -> Общие (его можно найти, развернув маленький треугольник рядом с C/C++) -> Дополнительные включаемые каталоги

Шаг 9. Нажмите на пустое место рядом с «Дополнительные каталоги включения».
Должен появиться небольшой раскрывающийся список в виде треугольника.Шаг 11. Нажмите значок «Добавить новую строку».

Шаг 12. Добавьте путь к папке, содержащей Eigen
Если щелкнуть пустое место, должен появиться значок с тремя точками «…». Щелкните этот значок и добавьте путь к папке, содержащей Eigen.
В моем случае путь:
потому что настоящей библиотекой Eigen является эта папка:
Шаг 13. Нажмите «ОК».

Шаг 14. Нажмите «Применить», а затем «ОК».

Шаг 15. Перейдите к файлу main.cpp (или как называется исходный код, который вы написали ранее).
Шаг 16. Скомпилируйте и запустите код.
Чтобы скомпилировать код, выберите «Сборка» -> «Сборка решения».
Затем, чтобы запустить код, выберите «Отладка» -> «Начать без отладки».
Вот что вы должны увидеть:

Вот оно! Все готово.
Последние публикации
Свяжитесь со мной в LinkedIn!
Моя цель — познакомиться со всеми, кто любит робототехнику. Свяжитесь со мной в LinkedIn, если вы нашли мою информацию полезной для себя. Также следите за моей страницей в LinkedIn, где я публикую интересный контент, связанный с робототехникой. Не стесняйтесь! Буду рад услышать от вас!
Использование библиотек, загруженных через vcpkg
Чтобы использовать библиотеку, которую вы загрузили с помощью диспетчера пакетов vcpkg, вы можете игнорировать приведенные ниже инструкции. Дополнительные сведения см. на странице vcpkg.io.
Использование статических библиотек
Если ваш проект статической библиотеки создается в том же решении:
Если статическая библиотека не является частью решения:
- Щелкните правой кнопкой мыши узел проекта приложения в обозревателе решений и выберите «Свойства».
- На странице свойств Каталоги VC++ добавьте путь к каталогу, содержащему файл LIB, в Пути к библиотеке. Затем добавьте путь к заголовочному файлу (файлам) библиотеки в каталоги включения.
- На странице свойств Linker > Input добавьте имя файла LIB в Дополнительные зависимости.
Библиотеки динамических ссылок
Если DLL создается как часть того же решения, что и приложение, выполните те же действия, что и для статической библиотеки.
Если библиотека DLL не является частью прикладного решения, вам потребуются: файл DLL, заголовки с прототипами для экспортируемых функций и классов и файл LIB, содержащий необходимую информацию о связывании.
- Скопируйте DLL в выходную папку вашего проекта или в другую папку по стандартному пути поиска Windows для DLL. Дополнительные сведения см. в разделе Порядок поиска в библиотеке динамической компоновки.
- Выполните шаги 1–3 для статических библиотек, чтобы указать пути к заголовкам и файлу LIB.
COM-объекты
Если вашему собственному приложению C++ необходимо использовать COM-объект, и этот объект зарегистрирован, все, что вам нужно сделать, — это вызвать CoCreateInstance и передать CLSID объекта. Система найдет его в реестре Windows и загрузит. Таким же образом проект C++/CLI может использовать COM-объект. Или он может использовать его, добавив ссылку на него из списка «Добавить ссылки» > COM и используя его через вызываемую оболочку времени выполнения.
Справочные свойства
Каждый вид ссылки имеет свойства. Вы можете просмотреть свойства, выбрав ссылку в обозревателе решений и нажав Alt + Enter, либо щелкнув правой кнопкой мыши и выбрав «Свойства». Некоторые свойства доступны только для чтения, а некоторые можно изменить. Однако обычно вам не нужно вручную изменять эти свойства.
Эталонные свойства ActiveX
Свойства ссылок ActiveX доступны только для ссылок на COM-компоненты. Эти свойства отображаются только при выборе COM-компонента на панели «Ссылки». Свойства нельзя изменить.
Управление полным путем
Отображает путь к каталогу элемента управления, на который указывает ссылка.
Отображает GUID для элемента управления ActiveX.
Отображает версию указанного элемента управления ActiveX.
Введите имя библиотеки
Отображает имя указанной библиотеки типов.
Отображает инструмент, используемый для создания сборки взаимодействия из указанной библиотеки COM или элемента управления ActiveX.
Свойства ссылки на сборку (C++/CLI)
Отображает относительный путь от каталога проекта до указанной сборки.
Создать свойства
Следующие свойства доступны для различных типов ссылок. Они позволяют указать, как строить со ссылками.
Указывает, следует ли автоматически копировать указанную сборку в целевое расположение во время сборки.
Копировать локальные вспомогательные сборки (C++/CLI)
Указывает, следует ли автоматически копировать вспомогательные сборки указанной сборки в целевое расположение во время сборки. Используется только в том случае, если для параметра Копировать локальное задано значение true .
Вывод эталонной сборки
Указывает, что эта сборка используется в процессе сборки. Если true , сборка используется в командной строке компилятора во время сборки.
Свойства ссылок между проектами
Следующие свойства определяют связь между проектами из проекта, выбранного на панели ссылок, в другой проект в том же решении. Дополнительные сведения см. в разделе Управление ссылками в проекте.
Связать зависимости библиотеки
Если для этого свойства установлено значение True, система проектов связывает файлы LIB, созданные независимым проектом, с зависимым проектом. Как правило, вы указываете True.
Уникально идентифицирует независимый проект. Значением свойства является внутренний системный GUID, который нельзя изменить.
Использовать входные данные зависимостей библиотеки
Если для этого свойства задано значение False, система проектов не будет связывать файлы OBJ для библиотеки, создаваемой независимым проектом, с зависимым проектом. Вот почему это значение отключает добавочное связывание. Как правило, вы указываете False, потому что создание приложения может занять много времени, если есть много независимых проектов.
Отображает имя сборки для указанной сборки.
Отображает язык и региональные параметры выбранной ссылки.
Отображает описание выбранной ссылки.
Отображает путь к каталогу указанной сборки.
Отображает метку ссылки.
Отображает название ссылки.
Токен открытого ключа
Отображает токен открытого ключа, используемый для идентификации сборки, на которую указывает ссылка.
true, если указанная сборка имеет строгое имя. Сборка со строгим именем имеет уникальную версию.
Чтобы Visual Studio могла найти заголовочные файлы PixeLINK API и библиотеку импорта, рекомендуется использовать переменную среды PIXELINK_SDK_ROOT, созданную при установке SDK.
Добавление каталога включения
Перейдите к диалоговому окну Страницы свойств проекта Visual Studio (в меню «Проект» выберите «Свойства» или щелкните проект правой кнопкой мыши в обозревателе решений). Выберите «Свойства конфигурации», «C/C++», «Общие», а затем добавьте $(PIXELINK_SDK_ROOT)\include в поле «Дополнительные включаемые каталоги».

В приведенном выше примере мы добавили каталог ко всем конфигурациям нашего проекта (‘getcamerafeature’).
Теперь, когда этот каталог добавлен, вы можете включить в свой код файл(ы) заголовков, используя
и компилятор найдет его в пути включения.
Добавление библиотеки импорта
При связывании вам нужно будет связать библиотеку импорта DLL API, PxLApi40.lib, чтобы проект знал, как использовать PxLApi40.dll.
Перейдите к диалоговому окну «Страницы свойств проекта», «Свойства конфигурации», «Компоновщик», «Общие», добавьте $(PIXELINK_SDK_ROOT)\lib в дополнительные каталоги библиотек.

В приведенном выше примере мы добавили каталог библиотеки во все конфигурации нашего проекта (‘getcamerafeature’).
Теперь, когда этот каталог добавлен, вы должны указать, что хотите подключить библиотеку импорта.
Перейдите к диалоговому окну «Страницы свойств проекта», «Свойства конфигурации», «Компоновщик», «Ввод», добавьте PxLApi40.lib в список дополнительных зависимостей, с которыми нужно связать.

Примечание по настройке
На последних двух снимках экрана было выбрано «Все конфигурации», чтобы наши изменения затрагивали все конфигурации (Отладка, Выпуск), но если у вас есть существующий проект и есть различия между двумя конфигурациями, лучше всего сделать вносить изменения в каждую отдельную конфигурацию, а не изменять все конфигурации одновременно.
Вы также можете просмотреть примеры кода C и C++, включенные в SDK, чтобы узнать, как настроены эти проекты. Если у вас возникнут дополнительные вопросы или проблемы с этим, обратитесь в службу поддержки Pixelink.
В этом руководстве вы настроите Visual Studio Code для использования компилятора и отладчика Microsoft Visual C++ в Windows.
После настройки VS Code вы скомпилируете и отладите простую программу Hello World в VS Code. В этом учебнике не рассказывается подробно о наборе инструментов Microsoft C++ или языке C++. По этим темам в Интернете доступно множество хороших ресурсов.
Если у вас возникнут какие-либо проблемы, не стесняйтесь сообщить о проблеме для этого руководства в репозитории документации VS Code.
Предпосылки
Чтобы успешно завершить это руководство, необходимо сделать следующее:
Установите расширение C/C++ для VS Code. Вы можете установить расширение C/C++, выполнив поиск «c++» в представлении «Расширения» ( ⇧⌘X (Windows, Linux Ctrl+Shift+X )).

Установите набор инструментов компилятора Microsoft Visual C++ (MSVC).
Если у вас установлена последняя версия Visual Studio, откройте установщик Visual Studio из меню «Пуск» Windows и убедитесь, что рабочая нагрузка C++ проверена. Если он не установлен, установите флажок и нажмите кнопку «Изменить» в программе установки.
Вы также можете установить рабочую нагрузку «Разработка рабочего стола на C++» без полной установки интегрированной среды разработки Visual Studio. На странице загрузок Visual Studio прокрутите вниз, пока не увидите Инструменты для Visual Studio 2022 в разделе Все загрузки, и выберите загрузку для инструментов сборки для Visual Studio 2022.

При этом будет запущен установщик Visual Studio, который откроет диалоговое окно с доступными рабочими нагрузками Visual Studio Build Tools. Проверьте рабочую нагрузку «Разработка рабочего стола с помощью C++» и выберите «Установить».

Примечание. Вы можете использовать набор инструментов C++ из Visual Studio Build Tools вместе с Visual Studio Code для компиляции, сборки и проверки любой кодовой базы C++, если у вас также есть действующая лицензия Visual Studio (Community, Pro , или Enterprise), которые вы активно используете для разработки этой кодовой базы C++.
Проверьте установку Microsoft Visual C++
Чтобы использовать MSVC из командной строки или VS Code, необходимо выполнить запуск из командной строки разработчика для Visual Studio. В обычной оболочке, такой как PowerShell, Bash или командная строка Windows, не установлены необходимые переменные среды пути.
Чтобы открыть командную строку разработчика для VS, начните вводить слово «разработчик» в меню «Пуск» Windows, и оно должно появиться в списке предложений. Точное имя зависит от того, какая версия Visual Studio или Visual Studio Build Tools у вас установлена. Выберите элемент, чтобы открыть приглашение.

Вы можете проверить правильность установки компилятора C++, cl.exe , введя ‘cl’, и вы должны увидеть сообщение об авторских правах с версией и основным описанием использования.

Если командная строка разработчика использует расположение BuildTools в качестве начального каталога (вам не следует помещать туда проекты), перейдите в папку пользователя ( C:\users\\ ), прежде чем начинать создавать новые проекты.
Примечание. Если по какой-то причине вы не можете запустить VS Code из командной строки разработчика, вы можете найти обходной путь для создания проектов C++ с помощью VS Code в разделе Запуск VS Code вне командной строки разработчика.
Создать Hello World
В командной строке разработчика создайте пустую папку с именем «projects», в которой вы можете хранить все свои проекты VS Code, затем создайте подпапку с именем «helloworld», перейдите в нее и откройте VS Code ( code ) в этой папке. ( . ), введя следующие команды:
Код . Команда открывает VS Code в текущей рабочей папке, которая становится вашей «рабочей областью». По мере прохождения руководства вы увидите три файла, созданных в папке .vscode в рабочей области:
- tasks.json (инструкции по сборке)
- launch.json (настройки отладчика)
- c_cpp_properties.json (путь к компилятору и настройки IntelliSense)
Добавить файл исходного кода
В строке заголовка проводника нажмите кнопку «Новый файл» и назовите файл helloworld.cpp .
Добавить исходный код Hello World
Теперь вставьте этот исходный код:
Теперь нажмите ⌘S (Windows, Linux Ctrl+S ), чтобы сохранить файл. Обратите внимание, как только что добавленный файл отображается в представлении Проводника ( ⇧⌘E (Windows, Linux Ctrl+Shift+E )) на боковой панели VS Code:

Вы также можете включить функцию «Автосохранение» для автоматического сохранения изменений в файле, установив флажок «Автосохранение» в главном меню «Файл».
Панель действий в крайнем левом углу позволяет открывать различные представления, например «Поиск», «Управление версиями» и «Выполнить». Вы познакомитесь с представлением «Выполнить» позже в этом руководстве. Дополнительные сведения о других представлениях см. в документации по пользовательскому интерфейсу VS Code.
Примечание. Когда вы сохраняете или открываете файл C++, вы можете увидеть уведомление от расширения C/C++ о доступности версии Insiders, которая позволяет протестировать новые функции и исправления. Вы можете проигнорировать это уведомление, выбрав X (Удалить уведомление).
Исследуйте IntelliSense
В новом файле helloworld.cpp наведите указатель мыши на вектор или строку, чтобы увидеть информацию о типе. После объявления переменной msg начните вводить msg. как при вызове функции-члена. Вы должны немедленно увидеть список завершения, который показывает все функции-члены, и окно, которое показывает информацию о типе для объекта msg:

Вы можете нажать клавишу Tab, чтобы вставить выбранный элемент; затем, когда вы добавите открывающую скобку, вы увидите информацию обо всех аргументах, которые требуются функции.
Сборка helloworld.cpp
Далее вы создадите файл tasks.json, чтобы указать VS Code, как собирать (компилировать) программу. Эта задача вызовет компилятор Microsoft C++ для создания исполняемого файла на основе исходного кода.
В главном меню выберите «Терминал» > «Настроить задачу сборки по умолчанию». В раскрывающемся списке будет отображаться раскрывающийся список задач со списком различных предопределенных задач сборки для компиляторов C++. Выберите cl.exe build active file, который создаст файл, отображаемый (активный) в данный момент в редакторе.

Это создаст файл tasks.json в папке .vscode и откроет его в редакторе.
Ваш новый файл tasks.json должен выглядеть примерно так, как показано ниже:
Настройка команды определяет программу для запуска; в данном случае это «cl.exe». Массив args указывает аргументы командной строки, которые будут переданы в cl.exe. Эти аргументы должны быть указаны в порядке, ожидаемом компилятором. Эта задача сообщает компилятору C++ взять активный файл ($), скомпилировать его и создать исполняемый файл (/Fe: переключатель) в текущем каталоге ($) с тем же именем, что и у активного файла, но с расширением .exe. ( $.exe ), что в нашем примере приводит к helloworld.exe.
Примечание. Подробнее о переменных tasks.json можно узнать в справочнике по переменным.
Значение ярлыка — это то, что вы увидите в списке задач; вы можете назвать это как хотите.
Значение ProblemMatcher выбирает анализатор выходных данных, который будет использоваться для поиска ошибок и предупреждений в выходных данных компилятора. Для cl.exe вы получите наилучшие результаты, если будете использовать средство сопоставления задач $msCompile.
Значение isDefault: true в групповом объекте указывает, что эта задача будет запущена при нажатии ⇧⌘B (Windows, Linux Ctrl+Shift+B ). Это свойство предназначено только для удобства; если вы установите для него значение false, вы все равно сможете запустить его из меню терминала с помощью Tasks: Run Build Task.
Запуск сборки
Вернитесь к файлу helloworld.cpp . Ваша задача создает активный файл, и вы хотите построить helloworld.cpp .
Чтобы запустить задачу сборки, определенную в tasks.json , нажмите ⇧⌘B (Windows, Linux Ctrl+Shift+B ) или в главном меню терминала выберите Задачи: Запустить задачу сборки.
При запуске задачи под редактором исходного кода должна появиться панель встроенного терминала. После завершения задачи терминал показывает выходные данные компилятора, указывающие на то, была ли сборка успешной или неудачной. Для успешной сборки C++ вывод выглядит примерно так:

Если сборка завершается сбоем из-за того, что не найден cl.exe или отсутствует путь включения, убедитесь, что вы запустили VS Code из командной строки разработчика для Visual Studio.
Создайте новый терминал с помощью кнопки +, и у вас будет новый терминал (работающий с PowerShell) с папкой helloworld в качестве рабочего каталога. Запустите ls, и теперь вы должны увидеть исполняемый файл helloworld.exe вместе с различными промежуточными выходными файлами C++ и файлами отладки ( helloworld.obj , helloworld.pdb ).

Вы можете запустить helloworld в терминале, набрав .\helloworld.exe .
Примечание. Возможно, сначала вам придется несколько раз нажать Enter, чтобы увидеть приглашение PowerShell в терминале. Эта проблема должна быть исправлена в будущем выпуске Windows.
Изменение tasks.json
Вы можете изменить файл tasks.json для создания нескольких файлов C++, используя такой аргумент, как «$\\*.cpp» вместо $ . Это создаст все файлы .cpp в вашей текущей папке.Вы также можете изменить имя выходного файла, заменив «$\\$.exe» жестко заданным именем файла (например, «$\\myProgram.exe» ).
Отладка файла helloworld.cpp
Далее вы создадите файл launch.json, чтобы настроить VS Code для запуска отладчика Microsoft C++ при нажатии клавиши F5 для отладки программы. В главном меню выберите «Выполнить» > «Добавить конфигурацию». а затем выберите C++ (Windows).
После этого вы увидите раскрывающийся список для различных предопределенных конфигураций отладки. Выберите cl.exe для сборки и отладки активного файла.

VS Code создает файл launch.json, открывает его в редакторе, строит и запускает «helloworld».
Настройка программы определяет программу, которую вы хотите отлаживать. Здесь указывается активная папка с файлами $ и активное имя файла с расширением .exe $.exe , которое, если активным файлом является helloworld.cpp, будет helloworld.exe .
По умолчанию расширение C++ не добавляет никаких точек останова в исходный код, а для параметра stopAtEntry установлено значение false . Измените значение stopAtEntry на true, чтобы отладчик останавливался на основном методе при запуске отладки.
Начать сеанс отладки
- Вернитесь к файлу helloworld.cpp, чтобы он стал активным.
- Нажмите F5 или в главном меню выберите «Выполнить» > «Начать отладку». Прежде чем вы приступите к просмотру исходного кода, обратите внимание на несколько изменений в пользовательском интерфейсе:
Интегрированный терминал отображается в нижней части редактора исходного кода. На вкладке «Вывод отладки» вы видите вывод, указывающий на то, что отладчик запущен и работает.
Редактор выделяет первый оператор в основном методе. Это точка останова, которую расширение C++ автоматически устанавливает для вас:
В представлении «Выполнение» слева отображается отладочная информация. Вы увидите пример позже в этом руководстве.
В верхней части редактора кода появляется панель управления отладкой. Вы можете перемещать его по экрану, хватая точки с левой стороны.
Пошаговое выполнение кода
Теперь вы готовы приступить к выполнению кода.
Нажимайте значок Step over на панели управления отладкой, пока не будет выделен оператор for (const string& word : msg).
Команда Step Over пропускает все вызовы внутренних функций в векторных и строковых классах, которые вызываются при создании и инициализации переменной msg. Обратите внимание на изменение в окне переменных слева. В этом случае ошибки ожидаются, потому что, хотя имена переменных для цикла теперь видны отладчику, оператор еще не выполнен, поэтому в этот момент читать нечего. Однако содержимое msg видно, потому что этот оператор завершен.
Нажмите Step over еще раз, чтобы перейти к следующему оператору в этой программе (пропустив весь внутренний код, который выполняется для инициализации цикла). Теперь в окне «Переменные» отображается информация о переменных цикла.
Снова нажмите Step, чтобы выполнить оператор cout. Примечание. Начиная с версии расширения за март 2019 г. выходные данные не отображаются до завершения цикла.
Если хотите, вы можете продолжать нажимать Step over до тех пор, пока все слова в векторе не будут напечатаны на консоли. Но если вам интересно, попробуйте нажать кнопку Step Into, чтобы просмотреть исходный код в стандартной библиотеке C++!

Чтобы вернуться к собственному коду, один из способов – продолжать нажимать кнопку «Перейти». Другой способ — установить точку останова в вашем коде, переключившись на вкладку helloworld.cpp в редакторе кода, поместив точку вставки где-нибудь в операторе cout внутри цикла и нажав F9. Красная точка появляется в поле слева, указывая на то, что в этой строке установлена точка останова.

Затем нажмите F5, чтобы начать выполнение с текущей строки в заголовке стандартной библиотеки. Выполнение прервется на cout . Если хотите, вы можете снова нажать F9, чтобы отключить точку останова.
Настроить часы
Иногда вам может понадобиться отслеживать значение переменной во время выполнения вашей программы. Вы можете сделать это, установив наблюдение за переменной.
Поместите точку вставки внутри цикла. В окне Watch выберите знак «плюс» и в текстовом поле введите слово, которое является именем переменной цикла. Теперь просмотрите окно Watch, когда будете проходить цикл.

Добавьте еще одно наблюдение, добавив этот оператор перед циклом: int i = 0; . Затем внутри цикла добавьте следующий оператор: ++i; . Теперь добавьте часы для i, как вы делали это на предыдущем шаге.
Чтобы быстро просмотреть значение любой переменной, пока выполнение приостановлено в точке останова, вы можете навести на нее указатель мыши.

Конфигурации C/C++
Если вам нужен больший контроль над расширением C/C++, вы можете создать файл c_cpp_properties.json, который позволит вам изменять такие параметры, как путь к компилятору, включаемые пути, стандарт C++ (по умолчанию C++ 17) и многое другое.
Вы можете просмотреть пользовательский интерфейс конфигурации C/C++, выполнив команду C/C++: Edit Configurations (UI) из палитры команд ( ⇧⌘P (Windows, Linux Ctrl+Shift+P )).

При этом открывается страница конфигураций C/C++. Когда вы вносите здесь изменения, VS Code записывает их в файл с именем c_cpp_properties.json в папке .vscode.

Visual Studio Code помещает эти параметры в файл .vscode\c_cpp_properties.json . Если вы откроете этот файл напрямую, он должен выглядеть примерно так:
Добавлять в параметр Включить массив путей нужно только в том случае, если ваша программа включает файлы заголовков, которых нет в вашей рабочей области или в пути стандартной библиотеки.
Путь к компилятору
ПараметрcompilePath является важным параметром в вашей конфигурации. Расширение использует его для определения пути к файлам заголовков стандартной библиотеки C++. Когда расширение знает, где найти эти файлы, оно может предоставлять полезные функции, такие как интеллектуальное завершение и навигация «Перейти к определению».
Расширение C/C++ пытается указать вcompilePath местоположение компилятора по умолчанию на основе того, что оно находит в вашей системе. Расширение выглядит в нескольких общих местах расположения компилятора.
Порядок поиска по пути компилятора:
- Сначала проверьте наличие компилятора Microsoft Visual C++Ope
- Затем найдите g++ в подсистеме Windows для Linux (WSL)
- Затем g++ для Mingw-w64.
Если у вас установлены g++ или WSL, вам может потребоваться изменить значениеcompilePath, чтобы оно соответствовало предпочитаемому компилятору для вашего проекта. Для Microsoft C++ путь должен выглядеть примерно так, в зависимости от установленной версии: «C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin /Hostx64/x64/cl.exe».
Повторное использование конфигурации C++
VS Code теперь настроен на использование компилятора Microsoft C++. Конфигурация применяется к текущей рабочей области. Чтобы повторно использовать конфигурацию, просто скопируйте файлы JSON в папку .vscode в новой папке проекта (рабочей области) и при необходимости измените имена исходных файлов и исполняемого файла.
Запуск VS Code вне командной строки разработчика
В некоторых случаях невозможно запустить VS Code из командной строки разработчика для Visual Studio (например, в сценариях удаленной разработки через SSH). В этом случае вы можете автоматизировать инициализацию командной строки разработчика для Visual Studio во время сборки, используя следующую конфигурацию tasks.json:
Примечание. Путь к VsDevCmd.bat может отличаться в зависимости от версии Visual Studio или пути установки. Вы можете найти путь к VsDevCmd.bat, открыв командную строку и запустив каталог «\VsDevCmd*» /s .
Устранение неполадок
Термин «cl.exe» не распознается
Если вы видите сообщение об ошибке «Термин «cl.exe» не распознается как имя командлета, функции, файла сценария или исполняемой программы», обычно это означает, что вы запускаете VS Code вне команды разработчика. Подсказка для Visual Studio и VS Code не знает путь к компилятору cl.exe.
VS Code необходимо либо запускать из командной строки разработчика для Visual Studio, либо задачу необходимо настроить для запуска вне командной строки разработчика.
Читайте также:
- Создайте портфолио воспитателя детского сада с помощью приложения Powerpoint
- Компьютерное программное обеспечение Insta360
- Программное обеспечение для сканирования Canoscan Lide 60
- Какие программы предназначены для обнаружения подозрительных действий во время работы компьютера
- Какие вредоносные программы не наносят явного вреда файловой системе операционной системы
Пошаговое руководство. Создание и использование собственной библиотеки динамических ссылок (C++)
В этом пошаговом руководстве показано, как с помощью интегрированной среды разработки (IDE) Visual Studio создать собственную библиотеку динамической компоновки (DLL), написанную на Microsoft C++ (MSVC). Далее в нем показано, как использовать библиотеку DLL из другого приложения C++. Библиотеки DLL (также называемые общими библиотеками в операционных системах на основе UNIX) являются одним из наиболее полезных компонентов Windows. Их можно использовать для обмена кодом и ресурсами, а также для уменьшения размера своих приложений. Библиотеки DLL могут упростить обслуживание и расширение приложений.
В этом пошаговом руководстве вы создадите библиотеку DLL, которая реализует некоторые математические функции. Затем вы создадите консольное приложение, использующее функции из библиотеки DLL. Попутно вы познакомитесь с некоторыми методами программирования и соглашениями, используемыми в библиотеках DLL для Windows.
В этом пошаговом руководстве рассматриваются следующие задачи:
- Создание проекта библиотеки DLL в Visual Studio.
- Добавление экспортированных функций и переменных в библиотеку DLL.
- Создание проекта «Консольное приложение» в Visual Studio.
- Использование в консольном приложении функций и переменных, импортированных из библиотеки DLL.
- Запустите готовое приложение.
Как и в случае со статически связанной библиотекой, библиотека DLL экспортирует переменные, функции и ресурсы по имени. Клиентское приложение импортирует имена для использования этих переменных, функций и ресурсов. В отличие от статически компонуемой библиотеки, Windows соединяет импорт в вашем приложении с экспортом в библиотеку DLL во время загрузки или выполнения, а не во время компоновки. Для выполнения этих подключений Windows требуются дополнительные сведения, которые не являются частью стандартной модели компиляции C++. Чтобы предоставить эти дополнительные сведения, компилятор MSVC реализует некоторые специальные расширения Майкрософт для C++. Мы рассмотрим эти расширения далее.
В этом пошаговом руководстве создаются два решения Visual Studio. Первое решение создает библиотеку DLL, а второе — клиентское приложение. Библиотека DLL использует соглашение о вызовах языка C. Ее можно вызывать из приложений, написанных на других языках программирования, при условии, что платформа, соглашения о вызовах и соглашения о связывании совпадают. Клиентское приложение использует неявную компоновку, в рамках которой Windows связывает приложение с библиотекой DLL во время загрузки. Эта компоновка позволяет приложению вызывать функции, предоставляемые библиотекой DLL, точно так же, как функции в библиотеке статической компоновки.
В этом пошаговом руководстве не рассматриваются некоторые общие ситуации. В нем не рассматривается использование библиотеки DLL для C++ другими языками. Он не показывает, как создавать DLL-библиотеки только для ресурсов или как использовать явную компоновку для загрузки библиотек DLL во время выполнения, а не во время загрузки. Уверяем вас, все это можно выполнять с помощью MSVC и Visual C++.
Несмотря на то что код библиотеки DLL написан на языке C++, мы использовали интерфейсы в стиле C для экспортированных функций. Существует две основные причины: во-первых, многие другие языки поддерживают импорт функций в стиле C. Клиентское приложение не должно быть записано на языке C++. Во-вторых, это позволяет избежать некоторых распространенных ошибок, связанных с экспортируемыми классами и функциями-членами. При экспорте классов легко диагностировать ошибки, так как все, что упоминалось в объявлении класса, должно иметь экземпляр, который также экспортирован. Это ограничение применяется к библиотекам DLL, но не к статическим библиотекам. Если классы имеют обычный стиль данных, вы не должны столкнуться с этой проблемой.
Ссылки на дополнительные сведения о DLL см. в статье Создание библиотек DLL на C/C++ в Visual Studio. Дополнительные сведения о явной и неявной компоновке см. в разделе Определение подходящего метода связывания. Дополнительные сведения о создании библиотек DLL C++ для использования с языками, в которых применяются соглашения о компоновках языка C, см. в статье Экспорт функций на языке C++ для использования в исполняемых модулях, исходный код которых написан на языке C. Дополнительные сведения о том, как создавать библиотеки DLL для использования с языками .NET, см. в статье Вызов функций библиотек DLL из приложений Visual Basic.
Необходимые компоненты
- Компьютер под управлением Microsoft Windows 7 или более поздних версий. Мы рекомендуем использовать последнюю версию Windows для более удобной разработки.

- копия Visual Studio. Сведения о скачивании и установке Visual Studio см. в этой статье. Когда вы запускаете установщик, убедитесь, что установлена рабочая нагрузка Разработка классических приложений на C++. Не беспокойтесь, если вы не установили эту рабочую нагрузку при установке Visual Studio. Вы можете снова запустить установщик и установить ее сейчас.
- копия Visual Studio. Сведения о скачивании и установке Visual Studio 2015 см. в разделе Установка Visual Studio 2015. Для установки компилятора и средств используйте выборочную установку C++, так как они не установлены по умолчанию.
- Базовые значения об использовании интегрированной среды разработки Visual Studio. Если вы уже использовали классические приложения для Windows, вы, вероятно, справитесь. Общие сведения см. в обзоре возможностей интегрированной среды разработки Visual Studio.
- Основные навыки владения языком C++. Не волнуйтесь, мы не будем делать ничего сложного.
В данном пошаговом руководстве подразумевается, что вы используете Visual Studio 2017 версии 15.9 или более поздней. В некоторых более ранних версиях Visual Studio 2017 имелись дефекты в шаблонах кода или использовались разные диалоговые окна пользовательского интерфейса. Чтобы избежать проблем, используйте Visual Studio Installer для обновления Visual Studio 2017 до версии 15.9 или более поздней.
Создание проекта библиотеки DLL
Этот набор задач позволяет создать проект для библиотеки DLL, добавить код и выполнить его сборку. Для начала запустите IDE Visual Studio и выполните вход, если это необходимо. Инструкции немного отличаются в зависимости от используемой версии Visual Studio. Убедитесь, что в элементе управления в верхнем левом углу этой страницы выбрана правильная версия.
Создание проекта библиотеки DLL в Visual Studio 2019

- В строке меню выберите Файл>Создать>Проект, чтобы открыть диалоговое окно Создание проекта.
- В верхней части диалогового окна для параметра Язык установите значение C++, для параметра Платформа — значение Windows, а для параметра Тип проекта — значение Библиотека.
- В отфильтрованном списке типов проектов щелкните Библиотека динамической компоновки (DLL), а затем нажмите кнопку Далее.
- На странице Настроить новый проект введите MathLibrary в поле Имя проекта. Примите заданные по умолчанию Расположение и Имя решения. Для параметра Решение задайте Создать новое решение. Снимите флажок Разместить решение и проект в одном каталоге, если он установлен.
- Нажмите кнопку Создать, чтобы создать проект.
После создания решения созданный проект вместе с исходными файлами отобразится в окне обозревателя решений в Visual Studio.

Создание проекта библиотеки DLL в Visual Studio 2017

- В строке меню последовательно выберите пункты Файл>Создать>Проект, чтобы открыть диалоговое окно Новый проект.
- На панели слева в диалоговом окне Новый проект выберите Установленные >Visual C++ >Классическое приложение для Windows. В центральной области выберите Библиотека динамической компоновки (DLL). В поле Имя введите MathLibrary. Примите заданные по умолчанию Расположение и Имя решения. Для параметра Решение задайте Создать новое решение. Установите флажок Создать каталог для решения, если он снят.
- Нажмите кнопку ОК, чтобы создать проект.
После создания решения созданный проект вместе с исходными файлами отобразится в окне обозревателя решений в Visual Studio.

Создание проекта библиотеки DLL в Visual Studio 2015 и более ранних версий
- В строке меню выберите Файл >Создать >Проект.
- В левой области диалогового окна Новый проект разверните узлы Установленные>Шаблоны и выберите Visual C++, а затем в центральной области щелкните Консольное приложение Win32. В поле Имя введите MathLibrary. Примите заданные по умолчанию Расположение и Имя решения. Для параметра Решение задайте Создать новое решение. Установите флажок Создать каталог для решения, если он снят.

- Нажмите кнопку ОК, чтобы закрыть диалоговое окно Новый проект, и запустите мастер приложений Win32.

- Нажмите кнопку Далее. На странице Параметры приложения в поле Тип приложения выберите пункт DLL.

- Нажмите кнопку Готово , чтобы создать проект.
Когда мастер завершит создание решения, вы сможете увидеть созданный проект вместе с исходными файлами в окне обозревателя решений в Visual Studio.

Пока эта библиотека DLL ничего не делает. Затем вы создадите файл заголовка для объявления функций, экспортируемых вашей библиотекой DLL, и добавите определения функций в библиотеку DLL, чтобы сделать ее более полезной.
Добавление файла заголовка в библиотеку DLL
- Чтобы создать файл заголовка для функций, последовательно щелкните Проект>Добавить новый элемент.
- В диалоговом окне Добавление нового элемента в левой области щелкните Visual C++. В центральной области выберите Заголовочный файл (.h). Укажите MathLibrary.h в качестве имени для файла заголовка.

- Нажмите кнопку Добавить, чтобы создать пустой файл заголовка, который отображается в новом окне редактора.

- Замените все содержимое этого файла заголовка следующим кодом:
// MathLibrary.h - Contains declarations of math functions #pragma once #ifdef MATHLIBRARY_EXPORTS #define MATHLIBRARY_API __declspec(dllexport) #else #define MATHLIBRARY_API __declspec(dllimport) #endif // The Fibonacci recurrence relation describes a sequence F // where F(n) is < n = 0, a // < n = 1, b // < n >1, F(n-2) + F(n-1) // for some initial integral values a and b. // If the sequence is initialized F(0) = 1, F(1) = 1, // then this relation produces the well-known Fibonacci // sequence: 1, 1, 2, 3, 5, 8, 13, 21, 34, . // Initialize a Fibonacci relation sequence // such that F(0) = a, F(1) = b. // This function must be called before any other function. extern "C" MATHLIBRARY_API void fibonacci_init( const unsigned long long a, const unsigned long long b); // Produce the next value in the sequence. // Returns true on success and updates current value and index; // false on overflow, leaves current value and index unchanged. extern "C" MATHLIBRARY_API bool fibonacci_next(); // Get the current value in the sequence. extern "C" MATHLIBRARY_API unsigned long long fibonacci_current(); // Get the position of the current value in the sequence. extern "C" MATHLIBRARY_API unsigned fibonacci_index();Этот файл заголовка объявляет некоторые функции для создания обобщенной последовательности Фибоначчи, исходя из двух начальных значений. Вызов fibonacci_init(1, 1) создает знакомую последовательность чисел Фибоначчи.
Обратите внимание на операторы препроцессора в верхней части файла. Новый шаблон проекта библиотеки DLL добавляется _EXPORTS к определенным макросам препроцессора. В этом примере Visual Studio определяет MATHLIBRARY_EXPORTS , когда создается проект DLL MathLibrary.
MATHLIBRARY_EXPORTS При определении MATHLIBRARY_API макроса макрос задает __declspec(dllexport) модификатор для объявлений функций. Этот модификатор предписывает компилятору и компоновщику экспортировать функцию или переменную из библиотеки DLL для использования другими приложениями. Если не определено, например, если MATHLIBRARY_EXPORTS файл заголовка включен клиентским приложением, MATHLIBRARY_API применяет __declspec(dllimport) модификатор к объявлениям. Этот модификатор оптимизирует импорт функции или переменной в приложении. Дополнительные сведения см. в статье dllexport, dllimport.
Добавление реализации в библиотеку DLL
- В обозревателе решений щелкните узел Файлы решения правой кнопкой мыши и выберите пункты Добавить >Новый элемент. Создайте новый CPP-файл с именем MathLibrary.cpp, аналогично добавлению нового файла заголовка на предыдущем шаге.
- В окне редактора выберите вкладку MathLibrary.cpp, если она уже открыта. Если нет, то в обозревателе решений дважды щелкните файл MathLibrary.cpp в папке Исходные файлы проекта MathLibrary.
- В редакторе замените содержимое файла MathLibrary.cpp следующим кодом:
// MathLibrary.cpp : Defines the exported functions for the DLL. #include "pch.h" // use stdafx.h in Visual Studio 2017 and earlier #include #include #include "MathLibrary.h" // DLL internal state variables: static unsigned long long previous_; // Previous value, if any static unsigned long long current_; // Current sequence value static unsigned index_; // Current seq. position // Initialize a Fibonacci relation sequence // such that F(0) = a, F(1) = b. // This function must be called before any other function. void fibonacci_init( const unsigned long long a, const unsigned long long b) < index_ = 0; current_ = a; previous_ = b; // see special case when initialized >// Produce the next value in the sequence. // Returns true on success, false on overflow. bool fibonacci_next() < // check to see if we'd overflow result or position if ((ULLONG_MAX - previous_ < current_) || (UINT_MAX == index_)) < return false; >// Special case when index == 0, just return b value if (index_ > 0) < // otherwise, calculate next sequence value previous_ += current_; >std::swap(current_, previous_); ++index_; return true; > // Get the current value in the sequence. unsigned long long fibonacci_current() < return current_; >// Get the current index position in the sequence. unsigned fibonacci_index()
- В окне редактора выберите вкладку MathLibrary.cpp, если она уже открыта. Если нет, то в обозревателе решений дважды щелкните файл MathLibrary.cpp в папке Исходные файлы проекта MathLibrary.
- В редакторе замените содержимое файла MathLibrary.cpp следующим кодом:
// MathLibrary.cpp : Defines the exported functions for the DLL. #include "stdafx.h" // use pch.h in Visual Studio 2019 and later #include #include #include "MathLibrary.h" // DLL internal state variables: static unsigned long long previous_; // Previous value, if any static unsigned long long current_; // Current sequence value static unsigned index_; // Current seq. position // Initialize a Fibonacci relation sequence // such that F(0) = a, F(1) = b. // This function must be called before any other function. void fibonacci_init( const unsigned long long a, const unsigned long long b) < index_ = 0; current_ = a; previous_ = b; // see special case when initialized >// Produce the next value in the sequence. // Returns true on success, false on overflow. bool fibonacci_next() < // check to see if we'd overflow result or position if ((ULLONG_MAX - previous_ < current_) || (UINT_MAX == index_)) < return false; >// Special case when index == 0, just return b value if (index_ > 0) < // otherwise, calculate next sequence value previous_ += current_; >std::swap(current_, previous_); ++index_; return true; > // Get the current value in the sequence. unsigned long long fibonacci_current() < return current_; >// Get the current index position in the sequence. unsigned fibonacci_index()
Чтобы убедиться, что все работает, скомпилируйте библиотеку динамической компоновки. Чтобы выполнить компиляцию, последовательно выберите Сборка>Собрать решение. Библиотека DLL и связанные выходные данные компилятора помещаются в папку с именем Debug непосредственно под папкой решения. При создании сборки выпуска выходные данные помещаются в папку с именем Release. Результат должен выглядеть следующим образом.
1>------ Build started: Project: MathLibrary, Configuration: Debug Win32 ------ 1>pch.cpp 1>dllmain.cpp 1>MathLibrary.cpp 1>Generating Code. 1> Creating library C:\Users\username\Source\Repos\MathLibrary\Debug\MathLibrary.lib and object C:\Users\username\Source\Repos\MathLibrary\Debug\MathLibrary.exp 1>MathLibrary.vcxproj -> C:\Users\username\Source\Repos\MathLibrary\Debug\MathLibrary.dll ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========1>------ Build started: Project: MathLibrary, Configuration: Debug Win32 ------ 1>stdafx.cpp 1>dllmain.cpp 1>MathLibrary.cpp 1>Generating Code. 1> Creating library C:\Users\username\Source\Repos\MathLibrary\Debug\MathLibrary.lib and object C:\Users\username\Source\Repos\MathLibrary\Debug\MathLibrary.exp 1>MathLibrary.vcxproj -> C:\Users\username\Source\Repos\MathLibrary\Debug\MathLibrary.dll ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========1>------ Build started: Project: MathLibrary, Configuration: Debug Win32 ------ 1>MathLibrary.cpp 1>dllmain.cpp 1>Generating Code. 1> Creating library C:\Users\username\Source\Repos\MathLibrary\Debug\MathLibrary.lib and object C:\Users\username\Source\Repos\MathLibrary\Debug\MathLibrary.exp 1>MathLibrary.vcxproj -> C:\Users\username\Source\Repos\MathLibrary\Debug\MathLibrary.dll 1>MathLibrary.vcxproj -> C:\Users\username\Source\Repos\MathLibrary\Debug\MathLibrary.pdb (Partial PDB) ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========Поздравляем, вы создали библиотеку DLL с помощью Visual Studio! Далее вы создадите клиентское приложение, которое использует функции, экспортируемые из библиотеки DLL.
Создание клиентского приложения, которое использует библиотеку DLL
При создании библиотеки DLL подумайте о том, как клиентские приложения могут его использовать. Чтобы вызвать функции или получить доступ к данным, экспортированным библиотекой DLL, исходный код клиента должен иметь объявления, доступные во время компиляции. Во время компоновки компоновщику требуются сведения для разрешения вызовов функций или доступа к данным. Библиотека DLL предоставляет эти сведения в библиотеке импорта — файле, который содержит сведения о поиске функций и данных вместо фактического кода. Во время выполнения библиотека DLL должна быть доступна клиенту в месте, которое может найти операционная система.
Независимо от того, является ли он вашим или предоставлен сторонним разработчиком, вашему проекту клиентского приложения требуется несколько фрагментов информации для использования библиотеки DLL. Ему необходимо найти заголовки, в которых объявляются экспорты библиотеки DLL, библиотеки импорта для компоновщика и сама библиотека DLL. Одним из решений является копирование всех этих файлов в ваш клиентский проект. Для сторонних библиотек DLL, которые вряд ли изменятся во время разработки вашего клиента, этот метод может быть лучшим способом их использования. Однако, когда вы также создаете библиотеку DLL, лучше избегать дублирования. Если вы делаете локальную копию файлов библиотеки DLL, которые находятся в стадии разработки, вы можете случайно изменить файл заголовка только в одной копии или использовать устаревшую библиотеку.
Чтобы избежать рассинхронизации, мы рекомендуем вам установить путь включения в своем клиентском проекте, чтобы добавить файлы заголовков библиотеки DLL напрямую из проекта DLL. Кроме того, укажите путь к библиотеке в своем клиентском проекте, чтобы добавить библиотеки импорта DLL из проекта DLL. Наконец, скопируйте встроенную библиотеку DLL из проекта DLL в выходной каталог своей сборки клиента. Этот шаг позволяет вашему клиентскому приложению использовать тот же код библиотеки DLL, который вы создали.
Создание клиентского приложения в Visual Studio

- В строке меню выберите «Файл>нового проекта«>, чтобы открыть диалоговое окно «Создать проект».
- В верхней части диалогового окна задайте для параметра Язык значение C++, для параметра Платформа значение Windows, а для Типа проекта — Консоль.
- В отфильтрованном списке типов проектов щелкните Консольное приложение, а затем нажмите кнопку Далее.
- На странице Настроить новый проект введите MathClient в поле Имя проекта. Примите заданные по умолчанию Расположение и Имя решения. Для параметра Решение задайте Создать новое решение. Снимите флажок Разместить решение и проект в одном каталоге, если он установлен.
- Нажмите кнопку Создать, чтобы создать клиентский проект.
Создается минимальный проект консольного приложения. Имя главного исходного файла будет совпадать с ранее введенным именем проекта. В этом примере используется имя MathClient.cpp. Вы можете создать проект, но он еще не использует вашу библиотеку DLL.
Создание клиентского приложения в Visual Studio 2017

- Дважды щелкните в верхней панели диалогового окна Дополнительные каталоги включаемых файлов, чтобы включить элемент управления «Поле ввода». Или щелкните значок папки, чтобы создать новую запись.
- В элементе управления «Поле ввода» укажите путь к расположению файла заголовка MathLibrary.h. Чтобы перейти к нужной папке, можно выбрать элемент управления с многоточием (. ). Можно также ввести относительный путь от исходных файлов клиента к папке, содержащей файлы заголовков библиотеки DLL. Если вы следовали инструкциям по размещению клиентского проекта в отдельном решении, отличном от библиотеки DLL, относительный путь должен выглядеть следующим образом: ..\..\MathLibrary\MathLibrary Если библиотеки DLL и клиентские проекты находятся в одном решении, относительный путь может выглядеть следующим образом: ..\MathLibrary Если библиотеки DLL и клиентские проекты находятся в других папках, измените относительный путь для соответствия. Или используйте элемент управления «Многоточие» для поиска папки.

- После ввода пути к файлу заголовка в диалоговом окне Дополнительные каталоги включаемых файлов нажмите кнопку ОК. В диалоговом окне Страницы свойств нажмите кнопку OK, чтобы сохранить изменения.
Теперь можно добавить файл MathLibrary.h и использовать функции, которые он объявляет, в вашем клиентском приложении. Замените содержимое файла MathClient.cpp, используя следующий код:
// MathClient.cpp : Client app for MathLibrary DLL. // #include "pch.h" Uncomment for Visual Studio 2017 and earlier #include #include "MathLibrary.h" int main() < // Initialize a Fibonacci relation sequence. fibonacci_init(1, 1); // Write out the sequence values until overflow. do < std::cout while (fibonacci_next()); // Report count of values written before overflow. std::cout
Этот код может быть скомпилирован, но не скомпилирован. Если вы создаете клиентское приложение, в списке ошибок появится несколько ошибок LNK2019. Это связано с отсутствием некоторых сведений о проекте: вы еще не указали, что проект зависит от библиотеки MathLibrary.lib . И вы не указали компоновщику, как найти файл MathLibrary.lib.
Чтобы устранить эту проблему, можно скопировать файл библиотеки непосредственно в проект клиентского приложения. Компоновщик сможет найти и использовать его автоматически. Однако если и библиотека, и клиентское приложение находятся в стадии разработки, это может привести к изменениям в одной копии, которые не будут отображаться в другой. Чтобы избежать этой проблемы, можно задать свойство Дополнительные зависимости, чтобы сообщить системе сборки о том, что проект зависит от MathLibrary.lib. Также можно задать путь Дополнительные каталоги библиотек в проекте, включив в него путь к исходной библиотеке при компоновке.
Добавление библиотеки импорта DLL в проект
- Щелкните правой кнопкой мыши узел MathClient в обозревателе решений и выберите Свойства, чтобы открыть диалоговое окно Страницы свойств.
- В раскрывающемся списке Конфигурация выберите пункт Все конфигурации, если он еще не выбран. Это гарантирует, что любые изменения свойств применяются к сборкам отладки и выпуска.
- В области слева выберите пункт Свойства конфигурации >Компоновщик>Ввод. На панели свойств щелкните раскрывающийся элемент управления рядом с полем ввода параметра Дополнительные зависимости, а затем щелкните Правка.

- В диалоговом окне Дополнительные зависимости добавьте MathLibrary.lib в список в верхнем элементе управления "Поле ввода".

- Нажмите кнопку OK, чтобы вернуться в диалоговое окно Страницы свойств.
- В области слева выберите пункт Свойства конфигурации >Компоновщик>Общие. На панели свойств щелкните раскрывающийся элемент управления рядом с полем ввода параметра Дополнительные каталоги библиотек, а затем щелкните Правка.

- Дважды щелкните в верхней панели диалогового окна Дополнительные каталоги библиотек, чтобы включить элемент управления "Поле ввода". В элементе управления "Поле ввода" укажите путь к расположению файла MathLibrary.lib. По умолчанию он находится в папке с именем Debug непосредственно в папке решения DLL. При создании сборки выпуска файл помещается в папку с именем Release. Можно использовать макрос $(IntDir) , чтобы компоновщик мог найти библиотеку DLL независимо от типа создаваемой сборки. Если вы следовали инструкциям по размещению клиентского проекта в отдельном решении, отличном от проекта DLL, относительный путь должен выглядеть следующим образом: ..\..\MathLibrary\$(IntDir) Если библиотеки DLL и клиентские проекты находятся в других расположениях, измените относительный путь для соответствия.

- Как только вы ввели путь к файлу библиотеки, в диалоговом окне Дополнительные каталоги библиотек нажмите кнопку ОК, чтобы вернуться в диалоговое окно Страницы свойств. Нажмите ОК, чтобы сохранить изменения свойств.
Ваше клиентское приложение теперь можно компилировать и компоновать, но в нем по-прежнему нет всего необходимого для запуска. Когда операционная система загружает ваше приложение, оно ищет библиотеку DLL MathLibrary. Если она не может найти библиотеку DLL в определенных системных каталогах, в пути среды или локальном каталоге приложения, загрузка завершается сбоем. В зависимости от операционной системы вы увидите сообщение об ошибке следующего вида:

Чтобы избежать этой проблемы, можно скопировать библиотеку DLL в каталог, в котором находится исполняемый файл клиента, в процессе сборки. Можно добавить событие после сборки в ваш проект, чтобы добавить команду, которая копирует библиотеку DLL в выходной каталог вашей сборки. Указанная здесь команда копирует библиотеку DLL только в том случае, если она отсутствует или была изменена. Он использует макросы для копирования в расположения отладки или выпуска на основе конфигурации сборки.
Копирование библиотеки DLL в событие после сборки

- Щелкните правой кнопкой мыши узел MathClient в обозревателе решений и выберите Свойства, чтобы открыть диалоговое окно Страницы свойств.
- В раскрывающемся списке Конфигурация выберите пункт Все конфигурации, если он еще не выбран.
- В области слева выберите Свойства конфигурации >События сборки >Событие после сборки.
- В области свойств щелкните элемент управления "Поле ввода" в поле Командная строка. Если вы следовали инструкциям по размещению клиентского проекта в отдельном решении, отличном от проекта DLL, введите следующую команду: xcopy /y /d "..\..\MathLibrary\$(IntDir)MathLibrary.dll" "$(OutDir)" Если библиотеки DLL и клиентские проекты находятся в других каталогах, измените относительный путь к библиотеке DLL для соответствия.
- Нажмите кнопку OK, чтобы сохранить изменения в свойствах проекта.
Теперь в вашем клиентском приложении есть все, что нужно для сборки и запуска. Соберите приложение, щелкнув команду Сборка>Собрать решение в меню. Окно Вывод в Visual Studio должно иметь примерно следующий вид в зависимости от используемой версии Visual Studio:
1>------ Build started: Project: MathClient, Configuration: Debug Win32 ------ 1>MathClient.cpp 1>MathClient.vcxproj -> C:\Users\username\Source\Repos\MathClient\Debug\MathClient.exe 1>1 File(s) copied ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========Поздравляем, вы создали приложение, которое вызывает функции в вашей библиотеке DLL. Теперь запустите свое приложение, чтобы увидеть, как оно работает. В строке меню щелкните Отладка>Начать без отладки. В Visual Studio открывается командное окно для запуска программы. Последняя часть выходных данных должна выглядеть так:

Для закрытия командного окна нажмите любую клавишу.
Теперь, когда вы создали библиотеку DLL и клиентское приложение, вы можете экспериментировать. Попробуйте задать точки останова в коде клиентского приложения и запустите приложение в отладчике. Посмотрите, что происходит, когда вы входите в вызов библиотеки. Добавьте другие функции в библиотеку или напишите другое клиентское приложение, которое использует вашу библиотеку DLL.
При развертывании приложения необходимо также развернуть используемые им библиотеки DLL. Самый простой способ сделать библиотеки DLL, которые вы создаете или добавляете из сторонних источников, доступными — поместить их в тот же каталог, что и ваше приложение. Это также называется локальным развертыванием приложений. Дополнительные сведения о развертывании см. в разделе Deployment in Visual C++.
- Добавьте к решению новое консольное приложение .NET под названием «Демонстрация».
- Добавьте к решению новое консольное приложение .NET под названием «Демонстрация».
- Добавьте к решению новое консольное приложение .NET под названием «Демонстрация».
