Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

LIB DLL tutotial

.pdf
Скачиваний:
12
Добавлен:
17.05.2015
Размер:
172.54 Кб
Скачать

Моя коллекция

Данный документ предоставляется «как есть». Информация и мнения, выраженные в данном документе, включая URL-адреса и другие ссылки на вебсайты, могут изменяться без предварительного уведомления. Данный документ не предоставляет вам какие-либо права на интеллектуальную собственность в продуктах Майкрософт или имени продукта. Копирование и использование данного документа допускаются только для внутренних справочных целей. Можно изменять данный документ для внутренних справочных целей. © Корпорация Майкрософт ﴾Microsoft.﴿, 2011. Все права защищены. Условия использования ﴾http://msdn.microsoft.com/cc300389.aspx﴿ | Товарные знаки

(http://www.microsoft.com/library/toolbar/3.0/trademarks/en-us.mspx)

Table Of Contents

Глава 1

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

Глава 1

Пошаговое руководство. Создание и использование статической библиотеки ﴾C++﴿

Visual Studio 2013

Вэтом пошаговом руководстве описывается создание библиотеки статической компоновки ﴾LIB-файл﴿ для использования с приложениями на C++. Статические библиотеки являются хорошим способом повторного использования кода. Вместо того чтобы каждый раз реализовывать одни и те же подпрограммы для обеспечения той или иной функциональности в каждом создаваемом приложении, их можно создать единожды и затем вызывать из приложений. Код, подключенный из статической библиотеки, становится частью вашего приложения — для использования кода не нужно устанавливать еще какой-либо файл.

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

Создание проекта статической библиотеки Добавление класса в статическую библиотеку

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

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

Для работы необходимо владеть основами языка C++.

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

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

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

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

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

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

6.На странице Параметры приложения в разделе Тип приложения выберите Статическая библиотека.

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

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

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

1.Для создания файла заголовка для нового класса откройте контекстное меню для проекта MathFuncsLib, а затем в поле Обозреватель решений выберите Добавить, Создать элемент. В диалоговом окне Добавить новый элемент в левой области в разделе Visual C++ выберите Код. В центральной области выберите Заголовочный файл ﴾.h﴿. Укажите имя для заголовка файла, например MathFuncsLib.h, и нажмите кнопку Добавить. Отобразится пустой файл заголовка.

2.Добавьте класс с именем MyMathFuncs, осуществляющий обычные арифметические операции, такие как сложение, вычитание, умножение и деление. Код должен выглядеть примерно следующим образом:

C++

// MathFuncsLib.h

namespace MathFuncs

{

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

static double Divide(double a, double b);

};

}

3.Для создания исходного файла для нового класса откройте контекстное меню проекта MathFuncsLib, а затем в поле Обозреватель решений выберите Добавить, Создать элемент. В диалоговом окне Добавить новый элемент в левой области в разделе Visual C++ выберите Код. В центральной области выберите Файл C++ ﴾.cpp﴿. Укажите имя для исходного файла — например, MathFuncsLib.cpp — и нажмите кнопку Добавить. Отобразится пустой исходный файл.

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

C++

//MathFuncsLib.cpp

//compile with: cl /c /EHsc MathFuncsLib.cpp

//post-build command: lib MathFuncsLib.obj

#include "MathFuncsLib.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)

{

return a / b;

}

}

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

Примечание

При выполнении сборки из командной строки Visual Studio программа собирается в два этапа. Сначала запустите cl /c /EHsc MathFuncsLib.cpp, чтобы скомпилировать код и создать файл объекта с именем MathFuncsLib.obj. ﴾Команда cl вызывает компилятор Cl.exe, а параметр /c дает указание компилировать без компоновки. Дополнительные сведения см. в разделе Параметр /c ﴾компиляция без связывания﴿.﴿ Во-вторых, запустите файл lib MathFuncsLib.obj, чтобы связать код и создать статическую библиотеку MathFuncsLib.lib. ﴾Команда lib вызывает диспетчер библиотек, Lib.exe. Дополнительные сведения см. в разделе Справочник по LIB.)

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

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

2.В левой области в категории Visual C++ выберите Win32.

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

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

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

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

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

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

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

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

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

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

ОК.

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

Чтобы найти путь к каталогу, откройте раскрывающийся список значений свойства и выберите Изменить. В текстовом поле диалогового окна Дополнительные каталоги включаемых файлов выберите пустую строку и нажмите кнопку с многоточием ﴾﴿ в конце строки. В диалоговом окне Выбор каталога выберите каталог MathFuncsLib и нажмите кнопку Выбор папки, чтобы сохранить выбранное значение и закрыть диалоговое окно. В диалоговом окне Дополнительные каталоги включаемых файлов, нажмите кнопку ОК, затем в диалоговом окне Окна свойств нажмите кнопку ОК для сохранения изменений в проект.

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

C++

//MyExecRefsLib.cpp

//compile with: cl /EHsc MyExecRefsLib.cpp /link MathFuncsLib.lib

#include <iostream>

#include "MathFuncsLib.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;

return 0;

}

6. Соберите исполняемый файл, выбрав команду Собрать решение в меню Сборка.

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

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

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

a + b = 106,4

a - b = -91,6

a * b = 732,6

a / b = 0,0747475

См. также

Задачи

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

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

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

Приложения Win32 для настольных систем ﴾Visual C++﴿

© 2014 Microsoft. Все права защищены.

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

Visual Studio 2013

Вэтом пошаговом руководстве описывается создание библиотеки динамической компоновки ﴾DLL﴿ для использования с C++ приложением. Использование библиотеки — хороший способ повторного использования кода. Вместо повторной реализации одних и тех же процедур в каждой программе, вы создаете их один раз и затем ссылаетесь на них из других приложений. Поместив код в библиотеке DLL, вы сэкономите место в каждом приложении, которое ссылается на этод код, а так же сможете обновлять DLL без перекомпиляции всех приложений. Дополнительные сведения о библиотеках DLL см. в разделе DLL в Visual C++.

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

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

Добавьте класс в DLL.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1.Чтобы создать файл заголовка для нового класса, в меню Проект выберите Добавить новый элемент. В диалоговом окне Добавить новый элемент в левой области в разделе Visual C++ выберите Код. В центральной области выберите Файл заголовка ﴾.h﴿. Укажите имя для заголовка файла, например MathFuncsDll.h, и нажмите кнопку Добавить. Отобразится пустой файл заголовка.

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

C++

// MathFuncsDll.h

#ifdef MATHFUNCSDLL_EXPORTS

#define MATHFUNCSDLL_API __declspec(dllexport)

#else

#define MATHFUNCSDLL_API __declspec(dllimport) #endif

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

C++

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 в исходном файле. Код должен выглядеть примерно следующим образом:

C++

// 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. Скомпилируйте библиотеку динамической компоновки, выбрав Собрать решение в меню Сборка.

Примечание

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

Примечание

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

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

1.Чтобы создать приложение С++, которое будет ссылаться и использовать созданную ранее в строке меню библиотеку 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 следующим кодом:

C++

//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;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]