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


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

В этом пошаговом руководстве описывается создание библиотеки динамической компоновки (DLL) (DLL) для использования с приложением A.C на C-++.Использование библиотеки являются хорошим способом повторного использования кода.Вместо повторной реализации те же процедуры в каждой программе, созданной им создается один раз и затем ссылки на них из приложений, требующих функции.Поместив кода в библиотеке DLL, сохранении пробел в каждом приложении, ссылки, и его можно обновить DLL без перекомпиляции всего приложения.Дополнительные сведения о библиотеках DLL см. в разделе Библиотека DLL в Visual C++.

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

  • Создание проекта библиотеки DLL.

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

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

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

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

В этом пошаговом руководстве будет создана библиотека DLL, которая может вызываться только из приложений, использующих соглашения о вызове C C-++.Дополнительные сведения о создании библиотеки DLL для использования с другими языками см. в разделе Вызов функций библиотек DLL из приложений Visual Basic.

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

Этот раздел предполагает знание основ языка C++.

Создание проекта (DLL) библиотеки динамической компоновки (DLL)

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

  2. На левой панели диалогового окна Создать проект разверните Установлено, Шаблоны, Visual C++, затем выберите Win32.

  3. В центральной области, выберите Консольное приложение Win32.

  4. Укажите имя для проект- для примера, MathFuncsDll- в поле Имя.Укажите имя для решение- для примера, DynamicLibrary- в поле Имя решения.Нажмите кнопку ОК.

  5. На странице Обзор диалогового окна Мастер приложений Win32, нажмите кнопку Далее.

  6. На странице Параметры приложения в поле Тип приложения, выберите dll.

  7. Нажмите кнопку Готово, чтобы создать проект.

Добавление класса в библиотеку динамической компоновки

  1. Создание файла заголовка для классов, в строке меню выберите Проект, Добавление нового элемента.В диалоговом окне Добавление нового элемента в левой панели выберите Visual C++, выберите Код.В центральной области, выберите Заголовочный файл (.h).Укажите имя для заголовка файл- для MathFuncsDll.h-and примера, а затем нажмите кнопку Добавить.Пустой файл заголовка.

  2. Добавьте следующий код в начало файла заголовка.

    // MathFuncsDll.h
    
    #ifdef MATHFUNCSDLL_EXPORTS
    #define MATHFUNCSDLL_API __declspec(dllexport) 
    #else
    #define MATHFUNCSDLL_API __declspec(dllimport) 
    #endif
    
    
  3. Добавьте базовый класс с именем MyMathFuncs для выполнения общих математические операции, такие как сложение, вычитание, умножение и деление.Код должен выглядеть следующим образом:

    namespace MathFuncs
    {
        // This class is exported from the MathFuncsDll.dll
        class MyMathFuncs
        {
        public: 
            // Returns a + b
            static MATHFUNCSDLL_API double Add(double a, double b); 
    
            // Returns a - b
            static MATHFUNCSDLL_API double Subtract(double a, double b); 
    
            // Returns a * b
            static MATHFUNCSDLL_API double Multiply(double a, double b); 
    
            // Returns a / b
            // Throws const std::invalid_argument& if b is 0
            static MATHFUNCSDLL_API double Divide(double a, double b); 
        };
    }
    

    Когда символ MATHFUNCSDLL_EXPORTS определен, символ MATHFUNCSDLL_API установит модификатор __declspec(dllexport) в объявлениях функции-члена в этом коде.Этот модификатор позволяет функции должны экспортироваться DLL таким образом, чтобы он мог использоваться другими приложениями.При MATHFUNCSDLL_EXPORTS не указано, MATHFUNCSDLL_API определяет модификатор __declspec(dllimport) в объявлениях функции-члена.Этот модификатор позволяет компилятору оптимизировать импорта функции из библиотеки DLL для использования в других приложениях.По умолчанию MATHFUNCSDLL_EXPORTS определяется при построении проекта MathFuncsDll.Дополнительные сведения см. в разделе dllexport, dllimport.

    ПримечаниеПримечание

    При построении проекта библиотеки DLL в командной строке используйте параметр компилятора /D можно определить символ MATHFUNCSDLL_EXPORTS.

  4. В проекте MathFuncsDll в Обозреватель решений в папке Исходные файлы откройте MathFuncsDll.cpp.

  5. Реализуйте функциональность класса MyMathFuncs в исходном файле.Код должен выглядеть следующим образом:

    // MathFuncsDll.cpp : Defines the exported functions for the DLL application.
    //
    
    #include "stdafx.h"
    #include "MathFuncsDll.h"
    #include <stdexcept>
    
    using namespace std;
    
    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 invalid_argument("b cannot be zero!");
            }
    
            return a / b;
        }
    }
    
  6. Компилировать библиотека динамической компоновки (DLL), выбрав Построение, Построить решение в строке меню.

    ПримечаниеПримечание

    Если используется экспресс-выпуск, не отображает меню Построение в строке меню выберите Сервис, Параметры, Расширенные параметры, чтобы включить его, а затем выберите Построение, Построить решение.

    ПримечаниеПримечание

    При построении проекта в командной строке используйте параметр компилятора /LD, чтобы указать, что выходной файл будет библиотеки DLL.Дополнительные сведения см. в разделе /MD, /MT, /LD (использование библиотеки времени выполнения).Используйте параметр компилятора /EHsc включать обработку исключений C-++ C.Дополнительные сведения см. в разделе Параметр /EH (модель обработки исключений).

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

  1. Чтобы создать приложение A.C, C-++, ссылающегося на и использование библиотек DLL, созданные в строке меню выберите Файл, Создать, Проект.

  2. В левой панели выберите Visual C++, выберите Win32.

  3. В центральной области, выберите Консольное приложение Win32.

  4. Укажите имя для проект- для примера, MyExecRefsDll- в поле Имя.В пункте Решение выберите Добавить в решение из раскрывающегося списка.После этого новый проект будет добавлен в то же решение, содержащее библиотеки DLL.Нажмите кнопку ОК.

  5. На странице Обзор диалогового окна Мастер приложений Win32, нажмите кнопку Далее.

  6. На странице Параметры приложения в поле Тип приложения, выберите Консольное приложение.

  7. На странице Параметры приложения в поле Дополнительные параметры, снимите флажок предкомпилированный заголовок.

  8. Нажмите кнопку Готово, чтобы создать проект.

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

  1. После создания приложения консоли создается пустая программа.Имя файла источника совпадает с именем, которое было выбрано ранее.В этом примере он имеет имя MyExecRefsDll.cpp.

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

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

  4. Для ссылки на файлы заголовков библиотек DLL необходимо изменить включенный путь каталога.Для этого в диалоговом окне Страницы свойств, разверните узел Свойства конфигурации, разверните узел C/C++, а затем выбирает Общие.Рядом с Дополнительные каталоги включаемых файлов укажите путь к местоположению файла заголовков MathFuncsDll.h.Можно использовать относительное путь- для примера. \ \ MathFuncsDll, затем нажмите кнопку ОК.

  5. Теперь класс MyMathFuncs можно использовать в приложении.Замените код в файле MyExecRefsDll.cpp следующим кодом:

    // MyExecRefsDll.cpp
    // compile with: /EHsc /link MathFuncsDll.lib
    
    #include <iostream>
    
    #include "MathFuncsDll.h"
    
    using namespace std;
    
    int main()
    {
        double a = 7.4;
        int b = 99;
    
        cout << "a + b = " <<
            MathFuncs::MyMathFuncs::Add(a, b) << endl;
        cout << "a - b = " <<
            MathFuncs::MyMathFuncs::Subtract(a, b) << endl;
        cout << "a * b = " <<
            MathFuncs::MyMathFuncs::Multiply(a, b) << endl;
        cout << "a / b = " <<
            MathFuncs::MyMathFuncs::Divide(a, b) << endl;
    
        try
        {
            cout << "a / 0 = " <<
                MathFuncs::MyMathFuncs::Divide(a, 0) << endl; 
        }
        catch (const invalid_argument &e) 
        {
            cout << "Caught exception: " << e.what() << endl; 
        }
    
        return 0;
    }
    
  6. Создайте исполняемый файл, выбрав Построение, Построить решение в строке меню.

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

  1. Убедитесь, что проект MyExecRefsDll выбран в качестве проекта по умолчанию.В поле Обозреватель решений введите select MyExecRefsDll, а затем в строке меню выберите Проект, Назначить запускаемым проектом.

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

a + B = 106,4 - a B = -91,6 * a B = 732,6 a и B = 0,0747475 перехваченного исключения: B не может быть равным нулю!

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

Назад:Библиотека DLL в Visual C++ | Далее:Практическое руководство. Создание библиотек классов

См. также

Задачи

Visual C++ Guided Tour

Walkthrough: Deploying Your Program (C++)

Основные понятия

Библиотека DLL в Visual C++

Вызов функций библиотек DLL из приложений Visual Basic

Другие ресурсы

Развертывание приложений рабочего стола (Visual C++)