Создание и использование DLL .
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Материалы лабораторной работы (делай раз, делай два) по созданию приватной сборки (динамически подключаемой библиотеки DLL)и пример ее использования в исполняемой сборке (в оконном режиме).

Все проекты, которые Вы создавали то сих пор, состояли только из одной сборки (исполняемого файла с расширением .exe). Это удобно с точки зрения переносимости, ведь весь код находится в одном файле. Достаточно передать этот файл пользователю, и он сможет запускать его на выполнение. Конечно при условии, что на его компьютере установлена платформа .NET.

Однако с точки зрения повторного использования кода это неудобно. Почему? Весь код приложения нужно иметь в виде исходного текста. Если от приложения к приложению используются одни и те же классы, то придется их писать в виде исходного кода во всех приложениях. Это нехорошо по нескольким причинам:- придется писать (или копировать) один и тот же код много раз, но это полбеды, а представьте себе ситуацию, в которой Вы внесли в эту общую часть для всех проектов изменения. Что дальше? Придется перекомпилировать все проекты, в которых используются эта общая часть? Это практически невозможно. Получится, что в некоторых приложениях будет работать одна версия общей части, в другой другая. Получится каша. Мало не покажется!

Встает вопрос: можно ли вынести некоторый код из приложения, отдельно его откомпилировать и в дальнейшем подключать к приложению, не внося изменений в код самого приложения? Можно и для этого используются сборки в виде динамически подключаемых библиотек (DLL).

Что для этого нужно? Для этого надо сделать такую DLL, поместить ее в одну директорию с исполняемым файломприложения. Затем надо запустить это приложение на выполнение. В некоторый момент его работы эта DLL-ка подключиться к нему и будет работать. Конечно, придется организовать приложении так, чтобы оно «знало», что во время работы надо подключать библиотеку.

Чего мы этим добьемся? Общую часть для нескольких приложений сделаем (DLL)? –Сделали.

 При изменении кода в подключаемой библиотеке код самого приложения может быть и не надо будет менять?. И это сделали.

Значит решили поставленную задачу: часть кода приложения оформили в виде DLL, откомпилировали её. В коде самого приложения подключили эту DLL-ку и, пожалуйста, пользуйся тем, что в этой DLL-ке написано.

 Что еще получилось? Оказывается, платформа .NET и механизм DLLустроентак, что исходный код библиотеки может быть написан на любом языке платформы .NET и использоваться любым языком программированияэтой платформы.

Более того, можно организовывать потомки от классов, объявленных в библиотеках, не обращая внимания на язык, на котором написан предок.

В этой лабораторной работе описано как сделать сборку в виде DLL-ки и как ее подключить к другой сборке, представленной в виде исполняемого файла (exe). (Может быть еще сделаем потомка того класса, который описан в DLL-ке)

Итак, давайте для начала создадим библиотеку. Для этого запускаем среду. Выбираем меню F ile | New | Project (Файл|Создать|Проект). Выбираем язык программирования Visual C#| Windowsи выделяем ClassLibrary (Библиотека классов). Используя кнопкуBrowse (Обзор) сделайте так, чтобы Ваш проект был расположенв папке именем БРТ_DLL. Внизу окна введите NameLibrary (Имя для библиотеки)StudLibr a ry. Нажимаете OK . Получаете новый проект, который очень похож на консольное приложение. В проекте только один файл Class1.cs, в котором объявлен пустой классClass1. В этом классе нет метода Main(), который должен запускаться первым при старте приложения. Почему? Это же не приложение, а библиотека и она не будет запускаться независимо. Попробуйтескомпилировать проект. В папке bin/Releaseили в bin/Debug должен появиться результирующий файл с расширением .dll – StudLibrary . dll. Сделали «пустую» DLL.

Заполняем его содержанием. Организуем в ней класс, в котором будет храниться информация о студенте: его имя, группу и год рождения. Класс имеет имя S tud.

Переименуем файл Class1.cs в Stud.cs и организуем там класс, в котором будут три закрытых поля и три свойства, которые записаны в сокращенном виде. Закрытые поля из-за того, что свойства записаны в сокращенном виде, даже не требуют явного описания. Пространству имен (namespace) дадим имя StudLib;

Файл Stud.cs должен иметь следующий вид:

 

usingSystem;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace StudLib //пространствоимен

{

publicclass Stud // класс

{

publicString Name { get; set; } // свойствовупрощенномвиде

publicString Gruppa { get; set; }

publicint GodR { get; set;}

}

Откомпилируйте проект.

Все, библиотека с именем StudLibrary.dll создана. В ней описано пространство имен StudLib, в котором описан класс Stud.

Теперь надо эту библиотеку подключить к какому-нибудь проекту.

Напишем тестовое простенькое Window-приложение с одной кнопочкой, в обработчике которой инициализируем объект классаStud из нашей библиотеки. Если после запуска приложения при нажатии на кнопочку не будет выдано сообщений об ошибках, значит объект создан и с ним можно работать. Это и будет нашим тестом.

 Что для этого надо сделать? Кроме стандартных действий при создании Windows-приложения его необходимо настроить так, чтобы при работе приложения была возможность использовать подключаемую библиотеку.

Для этого сначала сделайте так, чтобы ваше приложение с именем WinForm _ DLLTESTлежало в другой папке БРТ_ DLLTEST. Далее подключите к нему сделанную DLL-ку. Для этого в пункте главного меню Project (Проект)выберите пункт AddReference…(Добавить ссылку…). Откроется окно AddReference(Добавить ссылку),в блокноте этого окна выберите страничку Browse(Обзор) найдите требуемую DLL , выберите ее, в строке Имя файла появится имя выбранной DLLStudLibraryи нажмите OK. Все, подключили DLL-ку к нашему проекту.

Вернемся к форме нашего проекта. Повесьте на нее кнопочку Butto n 1. Откройте обработчик события button1_Click и инициализируйте в нем объект класса Stud. Воттак:

 

privatevoid button1_Click(object sender, EventArgs e)

{

       Stud st = new Stud();

   }

 

Попробуйте откомпилировать. Что, не получается?Компилятор сообщает, что не находит тип или пространство имен с именем Stud. Конечно, библиотеку то к проекту подключили, а пространство имен подключили? Нет. Как это сделать? К предложениям using… добавить еще одно using StudLib;

 

Весь код файла Form1.cs будет иметь следующий вид:

 

usingSystem;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using StudLib;//подключилипространствоимен

 

namespace WinFormsDLLTest

{

publicpartialclassForm1 : Form

{

public Form1()

   {

       InitializeComponent();

   }

 

privatevoid button1_Click(object sender, EventArgs e)

{

Stud st = newStud();

   }

}

}

 

 

Обратите внимание, что подключаем именно пространство имен StudLib, а не DLL-ку с именем StudLibrary.

Вот теперь компиляция должна пройти успешно и проект можно запустить на выполнение. Запускайте, давите кнопочку, ничего не происходит ? Это хорошо! Ведь никаких сообщений об ошибках не выдается. Значит объект s t инициализирован и с ним можно будет работать.

Это не все. Зайдите в папкуbin / Releaseили в bin / Debugпроекта WinFormDLLTest . Там появился файл StudLibrary . dll.

Вы сделали DLL, которая называетсяприватная сборка. Она должна находиться в той же директории, что и исполняемый файл. За корректную работу библиотеки в этом случае отвечает программист, система не следит за ее версиями.

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

 

И это еще не все.

Есть такой вопрос: что нужно передать пользователю, чтобы приложение было работоспособным? Сейчас выясним. Создайте папку UserDLL вне двух уже имеющихся директорий с двумя уже разработанными приложениями. Скопируйте туда две сборки, которые лежат в директории bin / Releaseили в bin / Debugтестового проекта из папки БРТ_ DLLTest : файлыWinFormsDLLTest . exe и StudLibrary . dll. Запустите исполняемый файл. Должен запуститься. Нажмите кнопочку. Ничего не происходит, значит объект инициализирован и все в порядке – DLL-ку подключили.

Дальше – переименуйте DLL-ку – поставьте впереди именем «_» ( имя станет _ StudLibrary . dll). Теперь это другая DLL. Запустите приложение – запускается. Это хорошо. Нажмите кнопочку – выдается сообщение об ошибке. Такими действиями выяснили, в какой момент работы приложения подключается динамически подключаемая библиотека – в момент первого требования данных, объявленных в ней.

Дата: 2019-11-01, просмотров: 176.