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

  • Для просмотра чата и остального функционала вам нужно авторизоваться или пройти регистрацию!

ElectroVamp

V.I.P пользователь
Автор темы
12 Окт 2011
209
48
601
Автор Metro Berlin

Сперва мы создадим библиотеку динамической компоновки (DLL). Библиотеки DLL являются хорошим способом повторного использования кода. Вместо того чтобы каждый раз реализовывать одни и те же подпрограммы в каждом создаваемом приложении, их можно создать единожды и затем вызывать из приложений для обеспечения соответствующей функциональности.

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

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

Предварительные требования


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

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

  1. В меню Файл выберите пункт Создать и затем пункт Проект....
  2. В узле Visual C++ области Типы проектов выберите Win32.
  3. В области Шаблоны выберите Консольное приложение Win32.
  4. Выберите имя проекта, например MathFuncsDll, и введите его в поле Имя. Выберите имя решения, например DynamicLibrary, и введите его в поле Имя решения.
  5. Для запуска мастера приложений Win32 нажмите кнопку ОК. На странице Общие сведения диалогового окна Мастер приложений Win32 нажмите кнопку Далее.
  6. На странице Параметры приложения диалогового окна Мастер приложений Win32, в поле Тип приложения, выберите пункт DLL, если он доступен, либо пункт Консольное приложение, если пункт DLL не доступен. В некоторых версиях Visual Studio создание проектов DLL с помощью мастеров не поддерживается. Необходимые изменения можно внести позднее для компиляции проекта в библиотеку DLL.
  7. На странице Параметры приложения диалогового окна Мастер приложений Win32 в поле Дополнительные параметры выберите пункт Пустой проект.
  8. Чтобы создать проект, нажмите кнопку Готово.

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

  1. Чтобы создать файл заголовка для нового класса, в меню Проект выберите команду Добавить новый элемент.... Откроется диалоговое окно Добавление нового элемента. В узле Visual C++ области Категории выберите пункт Код. В области Шаблоны выберите пункт Заголовочный файл (.h). Выберите имя файла заголовка, например MathFuncsDll.h, и нажмите кнопку Добавить. Отобразится пустой файл.
  2. Добавьте простой класс с именем MyMathFuncs, осуществляющий обычные арифметические операции, такие как сложение, вычитание, умножение и деление. Код должен выглядеть примерно следующим образом:

    Код:
    // MathFuncsDll.h
    
    namespace MathFuncs
    {
    class MyMathFuncs
    {
    public:
    // Returns a + b
    static __declspec(dllexport) double Add(double a, double b);
    
    // Returns a - b
    static __declspec(dllexport) double Subtract(double a, double b);
    
    // Returns a * b
    static __declspec(dllexport) double Multiply(double a, double b);
    
    // Returns a / b
    // Throws DivideByZeroException if b is 0
    static __declspec(dllexport) double Divide(double a, double b);
    };
    }
  3. Обратите внимание на модификатор __declspec(dllexport) в объявлениях методов в этом коде. Этот модификатор разрешает экспорт метода библиотекой DLL для использования его другими приложениями
  4. Чтобы создать исходный файл для нового класса, в меню Проект выберите команду Добавить новый элемент.... Откроется диалоговое окно Добавление нового элемента. В узле Visual C++ области Категории выберите пункт Код. В области Шаблоны выберите пункт Файл C++ (.cpp). Выберите имя исходного файла, например MathFuncsDll.cpp, и нажмите кнопку Добавить. Отобразится пустой файл.
  5. Реализуйте функциональность класса MyMathFuncs в исходном файле. Код должен выглядеть примерно следующим образом:

    Код:
    // MathFuncsDll.cpp
    // compile with: /EHsc /LD
    
    #include "MathFuncsDll.h"
    
    #include 
    
    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 new invalid_argument("b cannot be zero!");
    }
    
    return a / b;
    }
    }
  6. Чтобы построить библиотеку DLL проекта, в меню Проект выберите Свойства MathFuncsDll. В левой области в поле Свойства конфигурации выберите Общие. В правой области в поле Тип конфигурации выберите Динамическая библиотека (.dll). Нажмите кнопку ОК для сохранения изменений.
  7. Скомпилируйте библиотеку динамической компоновки, выбрав команду Построить решение в меню Построение. В результате будет создана библиотека DLL, которая может использоваться другими программами. Дополнительные сведения о библиотеках DLL см. в разделе Библиотека DLL в Visual C++.

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

  1. Чтобы создать приложение, которое будет ссылаться и использовать созданную ранее библиотеку динамической компоновки, в меню Файл выберите пункт Создать и затем пункт Проект....
  2. В узле Visual C++ области Типы проектов выберите Win32.
  3. В области Шаблоны выберите Консольное приложение Win32.
  4. Выберите имя проекта, например MyExecRefsDll, и введите его в поле Имя. В раскрывающемся списке рядом с полем Решение выберите пункт Добавить в решение. После этого новый проект будет добавлен в то же решение, что и библиотека динамической компоновки.
  5. Для запуска мастера приложений Win32 нажмите кнопку ОК. На странице Общие сведения диалогового окна Мастер приложений Win32 нажмите кнопку Далее.
  6. На странице Параметры приложения диалогового окна Мастер приложений Win32 в поле Тип приложения выберите пункт Консольное приложение.
  7. На странице Параметры приложения диалогового окна Мастер приложений Win32 в поле Дополнительные параметры снимите флажок Предкомпилированный заголовок.
  8. Чтобы создать проект, нажмите кнопку Готово.

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

ElectroVamp

V.I.P пользователь
Автор темы
12 Окт 2011
209
48
601
  1. По завершении создания консольного приложения будет создана пустая программа. Имя исходного файла будет совпадать с именем, выбранным ранее для проекта. В этом примере он имеет имя MyExecRefsDll.cpp.
  2. Для использования математических процедур из библиотеки динамической компоновки необходимо сослаться на эту библиотеку. Для этого в обозревателе решений выберите проект MyExecRefsDll и затем выберите Ссылки… в меню Проект. В диалоговом окне Страницы свойств разверните узел Общие свойства, выберите пункт .NET Framework и ссылки и затем нажмите кнопку Добавить новую ссылку….
  3. Появится диалоговое окно Добавление ссылки. В этом диалоговом окне отображается список всех библиотек, на которые можно ссылаться. На вкладке Проект перечисляются все проекты текущего решения и включенные в них библиотеки. На вкладке Проекты выберите MathFuncsDll. Затем нажмите кнопку ОК.
  4. Для создания ссылки на заголовочные файлы библиотеки динамической компоновки необходимо изменить путь к каталогам включения. Для этого в диалоговом окне Окна свойств последовательно разверните узлы Свойства конфигурации, C/C++, а затем выберите Общие. Рядом с полем Дополнительные каталоги включения введите путь к месту размещения файла заголовков MathFuncsDll.h.
  5. Исполняемый файл не загружает библиотеки динамической компоновки во время выполнения. Необходимо указать системе место для поиска библиотеки MathFuncsDll.dll. Это можно сделать с помощью переменной среды PATH. Для этого в диалоговом окне Окна свойств разверните узел Свойства конфигурации, а затем выберите Отладка. В поле Среда введите следующую строку: PATH=, где вместо необходимо подставить фактическое расположение библиотеки MathFuncsDll.dll. Нажмите кнопку ОК для сохранения всех изменений.
  6. Теперь класс MyMathFuncs можно использовать в приложении. Замените код в файле MyExecRefsDll.cpp следующим кодом:

    Код:
    // MyExecRefsDll.cpp
    // compile with: /EHsc /link MathFuncsDll.lib
    
    #include 
    
    #include "MathFuncsDll.h"
    
    using namespace std;
    
    int main()
    {
    double a = 7.4;
    int b = 99;
    
    cout
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.