Создание приложения, ссылающегося на 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 следующим кодом.

// 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 выбран в качестве проекта по умолчанию. В Обозревателе решенийвыберите MyExecRefsDll и затем в меню Проектвыберите Назначить запускаемым проектом.

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

1. a + b = 106,4

2. a - b = -91,6

3. a * b = 732,6

4. a / b = 0,0747475

Перехвачено исключение: b не может быть равно нулю!

 

Контрольные вопросы

1.Какие способы создания динамических библиотек существуют?

2.Опишите процесс неявного связывания функций в динамической библиотеке.

3.Как осуществляется процесс экспорта, импорта функций в динамическую библиотеку при неявном связывании?

4.Опишите функции, которые используются при явном связывании функций в библиотеке (LoadLibrary, FreeLibrary, GetProcAddress).

5.Как создается .DLL файл для функции Asc2Un?

6.Как в вызывающей программе импортируется функция из динамической библиотеки?

7.Поясните работу программы преобразования файла из кодировки ASCII в кодировку Unicode.