Поделиться через


Пошаговое руководство. Создание и использование управляемой сборки (C++)

Управляемая сборка представляет собой своего рода библиотеку, которая создается с целью эффективного многократного использования кода. Вместо повторной реализации одних и тех же подпрограмм во многих программах можно создать их один раз, а затем ссылаться на них из приложений, которым требуются эти функции.

В этом пошаговом руководстве рассмотрены следующие задачи:

  • создание проекта библиотеки классов;

  • добавление класса в библиотеку классов;

  • создание приложения, ссылающегося на библиотеку классов;

  • использование функциональных возможностей библиотеки классов в приложении;

  • запуск приложения.

Обязательные компоненты

Для выполнения этого пошагового руководства читатель должен владеть основами языка C++. Пользователям, только приступающим к изучению C++, рекомендуется руководство C++ Beginner's Guide (C++ для начинающих, на английском языке, автор Герберт Шилдт), которое доступно в центре начинающего разработчика на веб-сайте MSDN.

Создание проекта библиотеки классов

  1. В меню Файл выберите пункт Создать, а затем команду Проект.

  2. В области Типы проектов в категории Visual C++ выберите группу CLR.

    Каждый тип проекта из этой группы соответствует проекту, предназначенному для работы в среде CLR.

  3. В области Шаблоны выберите пункт Библиотека классов.

  4. В поле Имя введите имя для проекта, например MathFuncsAssembly. В поле Имя решения введите имя для решения, например ManagedAssemblies.

  5. Нажмите кнопку ОК, чтобы создать проект.

  6. По умолчанию создаваемый проект настраивается на использование предкомпилированного заголовка. Чтобы отключить предкомпилированный заголовок для проекта MathFuncsAssembly, выберите проект в окне Обозреватель решений, а затем в меню Проект выберите пункт Свойства. Последовательно разверните узлы Свойства конфигурации, C/C++, а затем выберите пункт Предварительно скомпилированные заголовки. В списке Создавать или использовать предварительно скомпилированный заголовочный файл выберите пункт Не использовать предкомпилированный заголовок. Чтобы сохранить изменения, нажмите кнопку ОК. Дополнительные сведения см. в разделе Создание файлов предкомпилированных заголовков.

Добавление класса в библиотеку классов

  1. После создания библиотеки классов CLR мастер создаст простой класс. Созданный файл заголовка и исходный файл имеют одинаковое имя, совпадающее с именем, данным проекту при создании. В этом примере они имеют имена MathFuncsAssembly.h и MathFuncsAssembly.cpp.

  2. Замените существующий код в файле 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);
        };
    }
    
  3. Реализуйте в исходном файле функциональные возможности класса 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;
        }
    }
    
  4. Скомпилируйте библиотеку классов, выбрав команду Построить решение в меню Построение. В результате будет создана библиотека динамической компоновки (DLL), которая может использоваться другими программами. Дополнительные сведения о библиотеках DLL см. в разделе библиотеки DLL.

Создание консольного приложения, ссылающегося на библиотеку классов

  1. В меню Файл выберите пункт Создать, а затем команду Проект.

  2. В области Типы проектов в категории Visual C++ выберите группу CLR.

  3. В области Шаблоны выберите элемент Консольное приложение CLR.

  4. В поле Имя введите имя для проекта, например MyExecRefsAssembly. В списке рядом с полем Решение выберите действие Добавить в решение, чтобы добавить новый проект в решение, которое содержит библиотеку классов.

  5. Нажмите кнопку ОК, чтобы создать проект.

  6. Отключите предкомпилированный заголовок для проекта MyExecRefsAssembly. Для этого выберите проект в окне Обозреватель решений, а затем в меню Проект выберите пункт Свойства. Последовательно разверните узлы Свойства конфигурации, C/C++, а затем выберите пункт Предварительно скомпилированные заголовки. В списке Создавать или использовать предварительно скомпилированный заголовочный файл выберите пункт Не использовать предкомпилированный заголовок. Чтобы сохранить изменения, нажмите кнопку ОК.

Использование функциональных возможностей библиотеки классов в консольном приложении

  1. После создания консольного приложения CLR мастер создаст программу, которая выводит на консоль текст "Hello World". Созданный исходный файл имеет имя, совпадающее с именем, данным проекту при создании. В этом примере он имеет имя MyExecRefsAssembly.cpp.

  2. Для использования математических процедур из библиотеки классов необходимо сослаться на эту библиотеку. Для этого выберите проект MyExecRefsAssembly в окне Обозреватель решений, а затем в меню Проект выберите пункт Свойства. В диалоговом окне Страницы свойств разверните узел Общие свойства, выберите элемент .NET Framework и ссылки и нажмите кнопку Добавить новую ссылку. Дополнительные сведения см. в разделе Среда и ссылки, общие свойства и диалоговое окно "Страницы свойств: <Имя проекта>".

  3. В диалоговом окне Добавление ссылки указаны все библиотеки, на которые можно создать ссылку. На вкладке .NET перечислены библиотеки, включенные в .NET Framework. На вкладке COM перечислены все COM-компоненты, установленные на компьютере. На вкладке Проект перечисляются все проекты текущего решения и включенные в них библиотеки. На вкладке Проекты выберите MathFuncsAssembly, после чего нажмите кнопку ОК.

    Примечание

    Ссылаться на сборку можно непосредственно из исходного файла посредством директивы #using, например #using <MathFuncsAssembly.dll>.Дополнительные сведения см. в разделе #using Directive (C/C++).

  4. Теперь в этом приложении можно использовать класс 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;
    }
    
  5. Постройте исполняемый файл, выбрав команду Построить решение в меню Построение.

Запуск приложения

  1. Убедитесь, что проект MyExecRefsAssembly выбран в качестве проекта по умолчанию. Для этого выберите проект MyExecRefsAssembly в окне Обозреватель решений и выберите команду Назначить запускаемым проектом в меню Проект.

  2. Чтобы запустить проект, выберите в меню Отладка команду Запуск без отладки. Выходные данные должны иметь следующий вид.

    a + b = 106.4
    a - b = -91.6
    a * b = 732.6
    a / b = 0.0747474747474748
    

Следующие действия

Перейти в предыдущий раздел: Пошаговое руководство. Создание и использование статической библиотеки (C++). Перейти в следующий раздел: Дальнейшее обучение (C++).

См. также

Задачи

Интерактивный учебник по Visual C++