Создание и использование управляемой сборки (C++)
Обновлен: Ноябрь 2007
Следующим типом библиотеки, которую мы создадим, является управляемая сборка. Управляемые сборки являются хорошим способом повторного использования кода. Вместо того чтобы каждый раз реализовывать одни и те же подпрограммы в каждом создаваемом приложении, их можно создать единожды и затем вызывать из приложений для обеспечения соответствующей функциональности.
В этом пошаговом руководстве рассматриваются следующие действия:
создание нового проекта библиотеки классов;
добавление класса в библиотеку классов;
создание приложения, ссылающегося на библиотеку классов;
использование функциональных возможностей библиотеки классов в консольном приложении;
запуск приложения.
Обязательные компоненты
Этот раздел предполагает знание основ языка C++. Если вы приступаете к изучению C++, рекомендуем вам "Руководство по С++ для начинающих", написанное Гербом Шилдтом (Herb Schildt), которое доступно по ссылке https://go.microsoft.com/fwlink/?LinkId=115303.
Создание нового проекта библиотеки классов
В меню Файл выберите пункт Создать и затем пункт Проект....
В узле Visual C++ области Типы проектов выберите CLR. При этом будет создан проект, предназначенный для среды CLR.
В области Шаблоны выберите пункт Библиотека классов.
Выберите имя проекта, например MathFuncsAssembly, и введите его в поле Имя. Выберите имя решения, например ManagedAssemblies, и введите его в поле Имя решения.
Нажмите ОК, чтобы создать проект.
По умолчанию создаваемые проекты настраиваются на использование предкомпилированных заголовков. Чтобы отключить предкомпилированные заголовки, в меню Проект выберите Свойства. Последовательно разверните узлы Свойства конфигурации, C/C++, а затем выберите пункт Предварительно скомпилированные заголовки. В раскрывающемся списке рядом с полем Создавать или использовать предварительно скомпилированный заголовочный файл выберите пункт Не использовать предкомпилированный заголовок. Нажмите кнопку ОК для сохранения этих изменений. Дополнительные сведения о предкомпилированных заголовках см. в разделе Создание файлов предкомпилированных заголовков.
Добавление класса в библиотеку классов
По завершении создания библиотеки классов CLR мастер создаст простейший класс. Имена файла заголовка и файла исходного кода будет совпадать с именем, выбранным ранее для проекта. В этом примере они имеют имена MathFuncsAssembly.h и MathFuncsAssembly.cpp.
Замените код в файле MathFuncsAssembly.h простейшим классом MyMathFuncsAssembly, осуществляющим обычные арифметические операции, такие как сложение, вычитание, умножение и деление. Код должен выглядеть примерно следующим образом:
// MathFuncsAssembly.h using namespace System; namespace MathFuncs { public ref class MyMathFuncs { public: // Returns a + b static double Add(double a, double b); // Returns a - b static double Subtract(double a, double b); // Returns a * b static double Multiply(double a, double b); // Returns a / b // Throws DivideByZeroException if b is 0 static double Divide(double a, double b); }; }
Реализуйте функциональность класса MyMathFuncs в исходном файле. Код должен выглядеть примерно следующим образом:
// MathFuncsAssembly.cpp // compile with: /clr /LD #include "MathFuncsAssembly.h" namespace MathFuncs { double MyMathFuncs::Add(double a, double b) { return a + b; } double MyMathFuncs::Subtract(double a, double b) { return a - b; } double MyMathFuncs::Multiply(double a, double b) { return a * b; } double MyMathFuncs::Divide(double a, double b) { if (b == 0) { throw gcnew DivideByZeroException("b cannot be zero!"); } return a / b; } }
Скомпилируйте библиотеку классов, выбрав команду Построить решение в меню Построение. В результате будет создана библиотека динамической компоновки (DLL), которая может использоваться другими программами. Дополнительные сведения о библиотеках DLL см. в разделе Библиотеки DLL.
Создание приложения, ссылающегося на библиотеку классов
Чтобы создать приложение, которое будет ссылаться и использовать созданную ранее библиотеку классов, в меню Файл выберите пункт Создать и затем пункт Проект....
В узле Visual C++ области Типы проектов выберите CLR. При этом будет создан проект, предназначенный для среды CLR.
В области Шаблоны выберите Консольное приложение CLR.
Выберите имя проекта, например MyExecRefsAssembly, и введите его в поле Имя. В раскрывающемся списке рядом с полем Решение выберите пункт Добавить в решение. После этого новый проект будет добавлен в то же решение, что и библиотека классов.
Нажмите ОК, чтобы создать проект.
По умолчанию создаваемые проекты настраиваются на использование предкомпилированных заголовков. Чтобы отключить предкомпилированные заголовки, в меню Проект выберите Свойства. Последовательно разверните узлы Свойства конфигурации, C/C++, а затем выберите пункт Предварительно скомпилированные заголовки. В раскрывающемся списке рядом с полем Создавать или использовать предварительно скомпилированный заголовочный файл выберите пункт Не использовать предкомпилированный заголовок. Нажмите кнопку ОК для сохранения этих изменений. Дополнительные сведения о предкомпилированных заголовках см. в разделе Создание файлов предкомпилированных заголовков.
Использование функциональных возможностей библиотеки классов в консольном приложении
По завершении создания консольного приложения CLR будет создана программа, выводящая на консоль приветствие "Hello World". Имя исходного файла будет совпадать с именем, выбранным ранее для проекта. В этом примере он имеет имя MyExecRefsAssembly.cpp.
Для использования математических процедур из библиотеки классов необходимо сослаться на эту библиотеку. Для этого в меню Проект выберите пункт Ссылки.... В диалоговом окне Окна свойств разверните узел Общие свойства, выберите пункт Ссылки, а затем нажмите кнопку Добавить новую ссылку.... Дополнительные сведения о диалоговом окне Ссылки... см. в разделе Среда и ссылки, общие свойства и диалоговое окно ''Страницы свойств: <Имя проекта>''.
Появится диалоговое окно Добавить ссылку. В этом диалоговом окне отображается список всех библиотек, на которые можно ссылаться. На вкладке .NET перечислены библиотеки, включенные в .NET Framework. На вкладке COM перечислены все COM-компоненты, установленные на компьютере. На вкладке Проект перечисляются все проекты текущего решения и включенные в них библиотеки. На вкладке Проекты выберите MathFuncsAssembly, после чего нажмите кнопку ОК. Дополнительные сведения о диалоговом окне Добавление ссылки см. в разделе Диалоговое окно "Добавление ссылки".
Примечание. Ссылаться на сборку можно непосредственно из файла исходного кода путем включения директивы #using, например #using <MathFuncsAssembly.dll>. Дополнительные сведения об этой директиве см. в разделе The #using Directive.
Теперь класс MyMathFuncs можно использовать в приложении. Замените содержимое функции в файле MyExecRefsAssembly.cpp следующим кодом:
// MyExecRefsAssembly.cpp // compile with: /clr /FUMathFuncsAssembly.dll using namespace System; int main(array<System::String ^> ^args) { double a = 7.4; int b = 99; Console::WriteLine("a + b = {0}", MathFuncs::MyMathFuncs::Add(a, b)); Console::WriteLine("a - b = {0}", MathFuncs::MyMathFuncs::Subtract(a, b)); Console::WriteLine("a * b = {0}", MathFuncs::MyMathFuncs::Multiply(a, b)); Console::WriteLine("a / b = {0}", MathFuncs::MyMathFuncs::Divide(a, b)); return 0; }
Постройте исполняемый файл, выбрав команду Построить решение в меню Построение.
Запуск приложения
Убедитесь, что проект MyExecRefsAssembly выбран в качестве проекта по умолчанию. В Обозревателе решений выберите проект MyExecRefsAssembly и затем в меню Проект выберите команду Назначить запускаемым проектом.
Чтобы запустить проект, в меню Отладка выберите команду Запуск без отладки. Результат должен выглядеть следующим образом:
a + b = 106.4 a - b = -91.6 a * b = 732.6 a / b = 0.0747474747474748
Следующие действия
Назад:Создание и использование статической библиотеки (C++) | Далее:Дальнейшее обучение (C++)
См. также
Задачи
Интерактивный учебник по Visual C++