Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
STIP_Labs_2015_16.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
6.06 Mб
Скачать

2.2.Разработка клиентского приложения для dll-расширения

В этой части надо подключить разработанную библиотеку ExtDLL к приложению, в качестве которого, в простейшем случае, можно создать такое же приложение, как и в предыдущей части, т.е. приложение с графическим интерфейсом. В качестве тренажа можно удалить из тестового приложения все привнесенное, т.е. вернуть его к первозданному виду. К слову, исключить какие-либо файлы из проекта можно так: на вкладке Solution View выберите заплесневевший файл с прошедшим сроком годности, с помощью ПКМ вызовите контекстное меню и в нем команду Exclude From Project.

Шаг 1. Добавление в проект библиотеки ExtDLL. Допустим, проект вы нарекли именем Client. В каталог этого проекта скопируйте файлы Graphic.h и ExtDLL.lib (из каталога проекта ExtDLL). В каталог Debug проекта Client скопируйте файл ExtDLL.dll.

В начало файла ChildView.cpp проекта Client надо добавить директивы препроцессора

#include "Graphic.h"

#include <Math.h>

Шаг 2. Использование класса CGraphic. Как и в тестовом приложении, добавим код, создающий и использующий объект класса CGraphic, в метод класса CChildView::OnPaint():

Попробуйте запустить приложение на выполнение. Ай-ай-яй, компилируется без ошибок, а вот линкер выдает ошибки вида

1>ChildView.obj : error LNK2019: unresolved external symbol "public: __thiscall CGraphic::~CGraphic(void)" (??1CGraphic@@QAE@XZ) referenced in function "protected: void __thiscall CChildView::OnPaint(void)" (?OnPaint@CChildView@@IAEXXZ)

MVS устроена так, что линкеру надо отдельно указать, какие DLL-библиотеки он должен использовать для поиска неразрешенных внешних ссылок.

Шаг 3. Добавление библиотеки импорта ExtDLL.lib в список входных библиотек компоновщика. Компиляция каждого cpp-файла у вас уже должна выполняться, а вот компоновка – нет. А почему собственно, спросите вы? Отвечаю: компоновщик не знает, где ему взять код класса CGraphic и поэтому он выводит массу сообщений об ошибках приведенного выше вида «,,, unresolved external symbol … CGraphic …» (неразрешенное внешнее имя).

Для решения этой проблемы надо сделать то же, что вы уже делали раньше: добавить ссылку на файл библиотеки ExtDLL.lib (.lib а не .dll !) в список Additional Dependencies линкера (рис.2).

Убедитесь в том, что программа работает так же, как и тестовое приложение. Обратите внимание на вывод в окне Debug: там вы обнаружите строку с сообщением о загрузке библиотеки ExtDLL.dll. Если же при запуске приложения на выполнение вы увидели сообщение об ошибке, включающее «…ExtDLL.dll не был найден…», то, значит библиотека ExtDLL.dll где-то заблудилась. Можно ее поместить в каталог Windows, а лучше – в тот каталог, где находится Ваше приложение (очевидно, это каталог …\Debug).

Осмыслите проделанную вами большую работу, восстановив мысленно все этапы ее выполнения. Можете себя восхвалить, но не очень ретиво, а можно воздать должное компилятору, отладчику и всевышнему.

Рис. 2. Добавление ссылки на библиотеку ExtDLL.lib в список входных зависимостей (Input) линкера

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