17315

Створення DLL-бібліотеки

Лабораторная работа

Информатика, кибернетика и программирование

Лабораторна робота 1. Створення DLLбібліотеки Мета роботи: 1. Створення DLLбібліотеки 2. Створення рішення з кількох проектів модулів 3. Створення DLLбібліотеки як окремого рішення. 4. Вивчення структури збірки метаданих збірки В платформі Microsoft .NET реалізовано ком...

Украинкский

2013-06-30

63.99 KB

7 чел.

Лабораторна робота 1. Створення DLL-бібліотеки

Мета роботи:

1. Створення DLL-бібліотеки

2. Створення рішення з кількох проектів (модулів)

3. Створення DLL-бібліотеки як окремого рішення.

4. Вивчення структури збірки, метаданих збірки

В платформі Microsoft .NET реалізовано компонентно-орієнтований підхід до програмування.

Цей підхід до проектування і реалізації програмних систем і комплексів є розвитком об'єктно-орієнтованого і практично придатніший для розробки великих  і розподілених систем.

В компонентній моделі .Net компонентом є збірка, яка може бути у вигляді виконуваного файлу (з розширенням EXE), або файлу динамічної бібліотеки (з розширенням DLL). До складу збірки входить маніфест.

Збірка є самодостатньою одиницею для розгортання, тиражування та повторного використання.

Збірка має маніфест, який містить інформацію про збірку (метадані, які описують збірку).

Динамічна бібліотека DLL як тип компонента

Динамічна бібліотека — набір функцій, скомпонованих разом у вигляді бінарного файла, який може бути динамічно завантажений в адресний простір процесу, що використовує ці функції. Динамічне завантаження (dynamic loading) — завантаження під час виконання процесу.

Оскільки динамічні бібліотеки є двійковими файлами, можна організувати спільну роботу бібліотек, розроблених із використанням різних мов програмування і програмних засобів, що спрощує створення застосувань на основі програмних компонентів (отже, динамічне компонування лежить в основі компонентного підходу до розробки програмного забезпечення).

1. Створення DLL-бібліотеки

Запустимо Visual Studio 2008, із стартової сторінки перейдемо до створення проекту, виберемо тип проекту «Class Library».  У вікні створення DLL всі поля заповнені значеннями за замовчанням. Як правило, їх слід перевизначити, задаючи власну інформацію.

У полі Name задати ім'я DLLMyLib.

У полі Location вказується шлях до каталогу, де зберігатиметься Рішення, що містить проект.

У полі Solution вибраний елемент «Create New Solution», що створює нове Рішення. Альтернативою є елемент списку, вказуючий, що проект може бути доданий до існуючого Рішення.

У вікні Solution Name задано ім'я Рішення.

Зверніть увагу на інші установки, зроблені в цьому вікні, - включений прапорець (за замовчанням) «Create directory for solution», у верхньому віконці із списку можливих каркасів вибраний каркас Framework .Net 3.5. Задавши необхідні установки і клацнувши по кнопці «OK», отримаємо автоматично побудовану заготівку проекту DLL, відкриту в середовищі Visual Studio 2008 .

Імена класів повинні бути змістовними. Змінимо ім'я «Class1» на ім'я «MyFun».  Для цього у вікні коду проекту виділимо ім'я змінної об'єкту, потім в головному меню виберемо пункт Refactor і підпункт Rename. У вікні, що відкрилося, вкажемо нове ім'я. Тоді будуть показані всі місця, що вимагають перейменування об'єкту. В даному випадку буде лише одна очевидна заміна, але в загальному випадку замін багато, так що автоматична заміна всіх входжень корисна.

Наступний крок також продиктований правилом стилю – ім'я класу і ім'я файлу, що зберігає клас, повинні збігатися. Перейменування імені файлу робиться безпосередньо у вікні проектів Solution Explorer.

І наступний крок продиктований також важливим правилом стилю, - додавання коментаря. Для цього в рядку перед заголовком класу слід набрати три слеша (три косі риски). В результаті перед заголовком класу з'явиться заголовний коментар – тег «summary», в який і слід додати короткий, але змістовний опис призначення класу. Теги «summary», якими слід супроводжувати класи, відкриті (public) методи і поля класу відіграють три важливі ролі. Вони полегшують розробку і супровід проекту, роблячи його самодокументованим. Клієнти класу при створенні об'єктів класу отримують інтелектуальну підказку, що пояснює суть того, що можна робити з об'єктами. Спеціальний інструментарій дозволяє побудувати документацію за проектом, що включає інформацію з тегів «summary».

У нашому випадку коментар до класу MyFun може бути достатньо простим – «Обчислення математичних функцій ».

Напишемо реалізацію одного методу класу – обчислення функції Sin(x) через ряд Тейлора.

Спочатку напишемо коментарі до методу (у форматі XML). Далі напишемо реалізацію методу. Отримаємо код.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace MyLib

{

///Обчислення математичних фунцій

   public class MySin

   {

    /// <summary>

    /// Sin(x)

    /// </summary>

    /// <param name="x">кут в радіанах – перший аргумент функції  Sin</param>

    ///<param name="n">показник ступеня – другий аргумент функції  Sin</param>

    /// <returns>Повертає значення функції Sin для заданого кута</returns>

       public static double Sin(double x, int n)

       {

           double result = 0;

           for (int i = 0; i < n; i++)

           {

               result = result + (Math.Pow((-1), i) * Math.Pow(x, (2 * i + 1))) / F(2 * i + 1);

           }

           return result;

       }

       static double F(int n)

       {

           double tmp = 1;

           for (int i = 1; i <= n; i++)

           {

               tmp = tmp * i;

           }

           return tmp;

       

       }

   }

}

Побудуємо Рішення, що містить проект, для чого в Головному меню виберемо пункт Build|Build Solution. В результаті успішної компіляції буде побудований файл з уточненням dll. Він знаходиться в папці проекту

.\bin\Debug

Оскільки побудована збірка не містить виконуваного файлу, то безпосередньо запустити наш проект на виконання не удасться. Побудуємо консольний  проект, до якого приєднаємо нашу DLL, і протестуємо, наскільки коректно працюють створені нами методи.

2. Створення консольного проекту для тестування функції з бібліотеки.

Виберемо пункт меню File|New|Project, задамо тип проекту ConsoleApplication, дамо йому ім'я – ConsoleMyLib, вкажемо, що проект додається до існуючого рішення.  В результаті у вже існуюче Рішення додасться ще один проект.

Напишемо код, який викликає функцію Sin(x,n), яку ми реалізували, стандартну функцію Sin(x), обчислює похибку і виводить результат на консоль.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace TestDLL

{

   class Program

   {

       /// <summary>

       /// Виклик бібліотечного метода Sin(x,n) з MyLib.dll

       /// </summary>

       /// <param name="args"></param>

       static void Main(string[] args)

       {

           Console.WriteLine("Введите x- угол в радианах");

           double x = double.Parse(Console.ReadLine());

           Console.WriteLine("Введите показатель степени n");

           int n = int.Parse(Console.ReadLine());

           //вызов метода вычисления sin(x) из библиотеки

           double my_sinus = MyLib.MyFun.Sin(x, n);

           //вызов метода из класса Math

           double sinus = Math.Sin(x);

           double delta = sinus - my_sinus;

           Console.WriteLine("my_sinus= {0},sin={1},delta={2}", my_sinus, sinus, delta);

           Console.ReadKey();

       }

   }

}

Побудуємо рішення і отримаємо повідомлення про помилку. Наша бібліотека не підключена  до проекту.

3. Підключення проекту бібліотеки до консольного проекту.

Для цього додамо посилання на проект з DLL MyLib. У вікні Solution Explorer наведемо покажчик миші до імені консольного проекту і з контекстного меню виберемо пункт меню «Add Reference». Виберемо вкладку «Projects». Оскільки проект MySin включений в Рішення, то він автоматично з'явиться у вікні, Якщо посилання потрібно встановити на проект, не включений в Рішення, то у вікні додавання посилань потрібно вказати шлях до проекту.

Посилання  на DLL  з'явиться в папці «References» консольного проекту. Тепер проекти зв'язані і з консольного проекту доступні функції DLL.

Перебудуємо рішення, щоб не було помилок.

4. Встановлення стартового проекту.

У вікні Solution Explorer наведемо курсор миші на заголовок консольного проекту і виберемо:

Set as StartUp Project

Після цього його можна запустити на виконання.

5. Створення Windows-проекту в тому самому рішенні.

Виберемо пункт меню File|New|Project, задамо тип проекту Windows Forms Application, дамо йому ім'я – WindowsMySin, вкажемо, що проект додається до існуючого Рішення.

На формі створимо 2 текстові поля для введення вхідних параметрів, третє і четверте – для результатів.

Додамо 2 кнопки. При натисканні кнопки "Обчислення Sin" виконується виклик функцій, "Вихід" – завершення роботи.

Код форми:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace WindowsMySin

{

   public partial class Form1 : Form

   {

       public Form1()

       {

           InitializeComponent();

       }

       private void button1_Click(object sender, EventArgs e)

       {

          double x = double.Parse(txt_x.Text);

          int n = int.Parse(txt_n.Text);

          //вызов метода вычисления sin(x) из библиотеки

          double my_sinus = MyLib.MyFun.Sin(x, n);

          //вызов метода из класса Math

          double sinus = Math.Sin(x);

          txt_y1.Text = my_sinus.ToString();

          txt_y2.Text = sinus.ToString();

       }

       private void button2_Click(object sender, EventArgs e)

       {

           this.Close();

       }

   }

}

6. Робимо проект стартовим і запускаємо на виконання. Результат:

7. Документування коду

    /// <summary>

    /// Sin(x)

    /// </summary>

    /// <param name="x">кут в радіанах – перший аргумент функції  Sin</param>

    ///<param name="n">показник ступеня – другий аргумент функції  Sin</param>

    /// <returns>Повертає значення функції Sin для заданого кута</returns>

Завдання для самостійної роботи

2. Створити DLL-бібліотеку, яка містить методи, що реалізують завдання. В кожному методі вказати XML-коментарі.

3. Створити рішення, яке включає DLL-бібліотеку, консольний проект, який тестує роботу бібліотечних методів.

3. Створити Windows-проект в тому самому рішенні, який викликає бібліотечні методи.

4. Створити DLL-бібліотеку як окреме рішення. Зв'язати бібліотеку з Windows-проектом.

варіанту

Зміст завдання

1

1. Створити масив для зберігання значень зросту студентів групи (20 чоловік). Заповнити масив за допомогою класу Random цілими числами в діапазоні від 160 до 190 включно.  Відсортувати масив і вивести на консоль його елементи.

2. Є прямокутний масив розмірністю (5x5). Визначити суму всіх елементів третього рядка  і  суму всіх елементів першого стовпчика.

3. Реалізувати консольній застосунок знаходження методом бісекції коренів нелінійного рівняння

6x4-3x3+8x2-25=0

2

1. Згенерувати масив М випадкових чисел в діапазоні від 1 до 50. Обчислити  суму елементів масиву, середнє арифметичне (мат.очікування) елементів M, квадратний корінь від М, min і max елементів масиву. Результати вивести на консоль.

2.  В двовимірному масиві зберігається інформація про зарплату  18 співробітників за 12 місяців (за січень – першому стовпчику, лютий – другому, ...). Визначити загальний бюджет зарплати за рік, загальну  і середню зарплату за квітень.

3. Реалізувати консольній застосунок знаходження методом Ньютона коренів нелінійного рівняння

(x2-6*x)2 -2(x-3)2=81

3

1. Згенерувати масив випадкових чисел в діапазоні від 10 до 100. Обчислити добуток елементів масиву, середнє арифметичне (мат.очікування) елементів M, min і max елементів масиву. Результати вивести на консоль.

2.  В двовимірному масиві зберігається інформація про зарплату  18 співробітників за 12 місяців (за січень – першому стовпчику, лютий – другому, ...). Визначити загальну зарплату кожного співробітника за рік і середню зарплату за кожний місяць.

3. Реалізувати консольній застосунок знаходження методом бісекції коренів нелінійного рівняння

(x2+2x)2-(x+1)2=55

4

1. Згенерувати масив випадкових дійсних чисел в діапазоні від 0 до 1. Відсортувати масив, знайти min і max елементи. Результати вивести на консоль.

2.  В двовимірному масиві зберігається інформація про зарплату  30 працівників фірми за 12 місяців (за січень – першому стовпчику, лютий – другому, ...). Визначити середню зарплату  фірми за кожний місяць року, а також середню зарплату за кожний місяць кожного співробітника.

3. Реалізувати консольній застосунок знаходження коренів нелінійного рівняння методом бісекції

(x2+x+1)( x2+x+1) -12=0

5

1. Згенерувати дві серії випадкових чисел, що повторюються. Кількість чисел ввести з консолі. Результати вивести на консоль.

2. В двовимірному масиві зберігається інформація про оцінки  студентів з двох дисциплін (з дисципліни ОС – в першому стовпчику, з дисципліни Мова С# - в другому). Визначити середню успішність студентів  групи і середній бал (рейтинг) кожного студента  з цих дисциплін.

3. Реалізувати консольній застосунок знаходження методом бісекції коренів нелінійного рівняння

(x2-5*x+7) 2- (x-2)(x-3)=0

6

1. Згенерувати масив чисел Фібоначчі. Кількість чисел ввести з консолі. Результати вивести на консоль.

2. Фірма має  10 магазинів. Інформація про прибуток кожного магазину за кожний місяць зберігається в двовимірному масиві (першрго – в першому рядку, другого – в другому, і т.д.). Обчислити середній прибуток кожного магазину.

3. Реалізувати консольній застосунок знаходження методом Ньютона коренів нелінійного рівняння

x4-13x2+36=0

7

1. Створити масив для зберігання значень ваги  студентів групи (20 чоловік). Заповнити масив за допомогою класу Random цілими числами в діапазоні від 50 до 100 включно.  Відсортувати масив і вивести на консоль його елементи.

2. В двовимірному масиві зберігається інформація про оцінки  кожного із 20 студентів групи по кожній з 10 дисциплін. Перший рядок – інформація про оцінки першого студента, друга – другого і т.д. Обчислити середню успішність кожного студента.

3. Реалізувати консольній застосунок знаходження коренів нелінійного рівняння методом бісекції

2x8+x4-15=0

8

1. Створити масив з 10 елементів і заповнити його значеннями в коді. Всі його елементи:

- зменшити на 20;

- помножити на останній елемент

- збільшити на число В, яке ввести з консолі

2. В двовимірному масиві зберігається інформація про оцінки кожного із 20 студентів групи по кожній з 10 дисциплін. Перший рядок – інформація про оцінки першого студента, друга – другого і т.д. Обчислити середню успішність групи по кожній з дисциплін і в цілому успішність групи.

3. Реалізувати консольний застосунок знаходження методом бісекції коренів нелінійного рівняння

x4-13x2+36=0

9

1. Створити масив з 10 елементів і заповнити його значеннями в коді. Визначити суму всіх елементів масиву, суму квадратів всіх елементів масиву, середнє арифметичне всіх елементів масиву.

2. В двовимірному масиві 3x5 знайти суму елементів в кожному рядку і суму елементів кожного стовпчика.

3.  Реалізувати консольній застосунок знаходження коренів нелінійного рівняння методом Ньютона

x4-2x3+x-132=0

10

1. Створити масив з 10 елементів і заповнити його значеннями в коді. Всі його елементи: збільшити у 2 рази, розділити на перший елемент, зменшити на число А, яке ввести з консолі.

2. Три групи студентів, в кожній з яких 20 чоловік, в сесію здавали по 4 екзамени.  Відомості про оцінки кожної групи зберігаються в двовимірних масивах. Визначити кращу групу за середньою оцінкою

3. Реалізувати консольній застосунок знаходження методом бісекції коренів нелінійного рівняння

8x4+6x3-13x2-x+3=0

11

1. Створити масив з 8 елементів і заповнити його випадковими дійсними числами в діапазоні від 1 до 20.  Результати вивести на консоль

2. Створити прямокутний масив і заповнити його випадковими числами від 1 до 40. Знайти суму елементів другого стовпчика

 

3. Реалізувати консольній застосунок знаходження методом Ньютона коренів нелінійного рівняння

x3+6x+4x2+3=0

12

1. Створити масив з 8 елементів і заповнити його випадковими дійсними числами в діапазоні від 21 до 40. Результати вивести на консоль

2. Створити прямокутний масив і заповнити його випадковими числами від 1 до 40. Знайти суму елементів третього рядка масиву, які менше 20

3. Реалізувати консольній застосунок знаходження методом бісекції коренів нелінійного рівняння

2x4-x3-9x2+13x-5=0

13

1. Створити масив і заповнити його 20-ма першими цілими числами, які діляться на 13 або на 17 і знаходяться в інтервалі, ліва границя якого рівна 300.

2. Створити прямокутний масив і заповнити його випадковими числами від 1 до 40. Знайти суму елементів першого рядка масиву і кількість його не нульових елементів

3. Реалізувати консольній застосунок знаходження методом бісекції коренів нелінійного рівняння

(x-1)3+(2x+3)3=27x3+8

14

1. Створити масив і заповнити його 30-ма простими числами (простим є число, яке ділиться на 1 і самого себе)

2. Створити прямокутний масив цілих чисел і

заповнити його випадковими числами від 1 до 100. Визначити суму елементів масиву, які більше 30 і середнє арифметичне  всіх елементів

3. Реалізувати консольній застосунок знаходження методом бісекції коренів нелінійного рівняння

x4-4x3-19x2+106x-120=0

15

1. Створити масив і заповнити його 20-ма випадковими числами в діапазоні  20 до 100. Вивести на консоль елемент за його індексом в масиві.

2. Створити прямокутний масив цілих чисел і заповнити його випадковими числами від 1 до 60. Визначити суму елементів масиву, які більше 10 і середнє арифметичне елементів першого рядка

3. Реалізувати консольній застосунок знаходження методом бісекції коренів нелінійного рівняння

x4-2x3+x-132=0

16

1. Створити масив, розмір масиву ввести з консолі, заповнити його випадковими числами від 1 до 50. Відсортувати елементи. Вивести на консоль в прямому і зворотному порядку.

2. Створити прямокутний масив цілих чисел і ініціалізувати його при створенні. Для кожного рядка масиву обчислити суму від'ємних елементів.

3. Реалізувати консольній застосунок знаходження методом Ньютона коренів нелінійного рівняння

6x3-x2-20x+12=0

17

1. Створити масив, розмір масиву ввести з консолі, заповнити його випадковими дійсними числами від 1 до 50. Обчислити корінь квадратний кожного з його елементів і середнє арифметичне двох сусідніх елементів.

2. Створити прямокутний масив цілих чисел і ініціалізувати його при створенні. Для кожного рядка масиву обчислити суму додатних і від'ємних  елементів.

3. Реалізувати консольній застосунок знаходження методом Ньютона коренів нелінійного рівняння

x4+1=2(1+x)4

18

1. Створити масив, в якому зберігаються  дані про кількість опадів, які випали за кожний день місяця (наприклад, в листопаді). Обчислити загальну і середню кількість опадів за  місяць.

2. Створити прямокутний масив цілих чисел і ініціалізувати його при створенні. Для кожного стовпчика масиву обчислити суму додатніх, від'ємних елементів.

3. Реалізувати консольній застосунок знаходження методом Ньютона коренів нелінійного рівняння

x4+1=2(1+x)4

19

1. Створити масив, в якому зберігаються  дані про температуру  в одному місяці. Обчислити середню температуру в місяці.

2. Створити прямокутний масив цілих чисел і ініціалізувати його при створенні. Для кожного рядка  масиву обчислити  кількість елементів, які більше 10.

3. Реалізувати консольній застосунок знаходження методом бісекції коренів нелінійного рівняння.

6x3-x2-20x+12=0

20

1. Створити масив, в якому зберігаються дані про кількість опадів, що випали за кожний день місяця (наприклад, в травні). Обчислити в якій половині місяця (першій чи другій) випало більше опадів. Обчислити в якій декаді місяця  кількість опадів була найбільшою

2. Створити прямокутний масив цілих чисел і ініціалізувати його при створенні. Знайти  максимальний і мінімальний елементи кожного рядка.

3. Реалізувати консольній застосунок знаходження методом бісекції коренів нелінійного рівняння

6x3-x2-20x+12=0


 

А также другие работы, которые могут Вас заинтересовать

65149. О ДАТАХ ЖИЗНИ ЧИНГИСХАНА 112 KB
  Если относительно смерти Чингисхана существует общепринятая дата август 1227 года которая подтверждена всеми основными источниками то относительно его рождения до сих пор нет такого согласия ни в источниках ни в исследованиях ни в официозе.
65150. Осадные технологии монголов 645 KB
  Данная тема имеет особое значение при рассмотрении военного государства Чингисхана кроме развития тактики и стратегии применения конницы естественной для кочевников военной силы монголы эффективно сокрушали крепости и города в государствах развитых оседлых народов.
65151. Русь и тюрко-монгольский мир за 1500 лет 102.5 KB
  Русские князья предпочли отказаться от этой чести и решили сражаться до последнего. В этом случае русские фактически выступают союзниками Великого Булгара бывшего в подчинении у Хазарии и долго добивавшегося независимости.
65152. Великий западный поход чингизидов на Булгар, Русь и Центральную Европу 294 KB
  Этот поход начался с разгрома Булгара и владений приволжско-уральских народов: саксинов, мордвы, суваров, вотяков и других. Принятие решения о нем известно в передаче нескольких источников, приведем текст Джувейни...
65153. К ВОПРОСУ О ПЕРВОНАЧАЛЬНОЙ ЧИСЛЕННОСТИ МОНГОЛОВ В УЛУСЕ ДЖУЧИ 78.5 KB
  Обычно ссылаются на 4 тысячи монголов о которых сообщает Рашид ад Дин как о выделенных Чингисханом войсках для улуса Джучи. Действительно у Рашид ад Дина есть раскладка монгольских тысяч которые Чингисхан согласно трактовке...
65154. Материалы источников по битве при Калке 106 KB
  Татары же повернули назад и пошли в свои вежи. Дошли вести в стан что пришли татары посмотреть русские ладьи; услышав же об этом Даниил Романович и сев на коня погнался посмотреть на невиданную рать; и бывшие с ним конники и многие другие князья вместе с ним помчались смотреть невиданное войско.
65155. ОБЫЧАЙ И ЗАКОН В ПРАВЕ НАРОДОВ ЦЕНТРАЛЬНОЙ АЗИИ ПОСЛЕ ИМПЕРИИ ЧИНГИСХАНА 23 KB
  Исследователи права центрально-азиатских кочевников активно ведут дискуссии являлось ли это право обычным или позитивным. Право изучалось в следующих направлениях: практическое для последующей интеграции в иную правовую систему сбор сведений о казахском праве русскими чиновниками...
65156. Ордынские корни российских органов исполнительной власти 43 KB
  Ордынские корни российских органов исполнительной власти Проблемы истории государственного управления : государственный аппарат и реформы в России к 200 летию министерской системы управления в России...
65157. Основные этапы эволюции казахского суда биев (XV – начало ХХ вв.) 133 KB
  Казахский суд биев несомненно являет собой яркий пример института осуществляющего правосудие в системе традиционного права. При этом весьма интересно отметить что в большинстве случаев каждый новый этап развития суда биев как правового и процессуального института...