- •Лабораторные работы по курсу «Современные технологии и инструментарий программирования»
- •1. Разработка и использование «обычных» библиотек dll (cui)
- •1.1.Бесценные методические приказания
- •2.Разработка и использование dll-расширения
- •Ознакомиться с теоретической частью работы, для чего придется изучить раздел конспекта «Разработка и использование собственных dll», особенно подраздел «Основы dll».
- •2.1.Разработка библиотеки-расширения
- •2.2.Разработка клиентского приложения для dll-расширения
- •3.Разработка внутрипроцессного сервера и клиентского приложения с использованием atl
- •Часть 1. Разработка простого внутрипроцессного сервера сом, реализованного в виде библиотеки dll
- •Interface iMathem2; // добавлено
- •Часть 2. Разработка клиентского консольного приложения для тестирования внутрипроцессного сервера сом
- •4.Разработка и использование локального сервера
- •Часть 1. Разработка локального сервера сом
- •Часть 2. Разработка клиентского приложения для локального сервера сом
- •Литература
- •7. Проект New_Syntax
- •8. Руководство_по_c#.Doc
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) линкера
