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


 

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

34938. Кредит и его формы 28 KB
  Кредитные отношения могут выражаться в разных формах кредита коммерческий кредит банковский кредит и др. Другие определения кредита: взаимоотношения между кредитором и заёмщиком; возвратное движение стоимости; движение платежных средств на началах возвратности; движение ссуженной стоимости; движение ссудного капитала; размещение и использование ресурсов на началах возвратности; предоставление настоящих денег взамен будущих денег и др. Формы кредита: На рынке реализуются две основные формы кредита: коммерческий и банковский....
34939. Макроэкономическое равновесие в трактовке классической и неокейсианской школ 31 KB
  Макроэкономическое равновесие в трактовке классической и неокейсианской школ Описывает поведение экономики Классическая школа: в долговой период Кейсианская: в краткосрочный Рассматривает условия Кля: для совершенной конкуренции Кейя: для несовершенной конкуренции Исходит из того что Кля: совокупный спрос = совокупному предложению т. Кейя: экономика может находиться в равновесии даже при неоптимальном использовании ресурсов. Экономика функционирует в условиях Кля: полной занятости всех ресурсов Кейя: недозагрузки. Рост экономики...
34940. Макроэкономическое равновесие и ее модель 27 KB
  Равновесие бывает краткосрочным текущим и долгосрочным. 2реальное равновесие которое существует в условиях несовершенной конкуренции и при наличии внешних эффектов. Различают: 1Частичное равновесие – это равновесие установившееся в отдельных отраслях и сферах экономики.
34941. Методы экономической теории 29.5 KB
  Частные методы включают в себя следующие методы: графический; статистический; метод экономикоматематического моделирования; метод сравнительного анализа; экономический эксперимент.
34942. Монополия: сущность и виды 38 KB
  В силу объективных причин могут возникнуть: сырьевая монополия наличие единственного месторождения полезного ископаемого или иного экономического ресурса; административная монополия государственное регулирование в интересах общества экономического спроса некоторых товаров алкоголь оружие и т.; естественная монополия производство продукции одной фирмой обходится дешевле обществу чем двумя и более коммунальные службы. Наряду с естественными монополиями существуют и искусственные создаваемые за счет специальных мер:...
34943. Налоги. Понятие и виды 25.5 KB
  Понятие и виды Налоги – это обязательные платежи взимаемые государством с физических и юридических лиц на основе специального законодательства. Налоги образуют источник бюджетных доходов; Функция перераспределения ресурсов между отраслями. Налоги стимулируют одни виды деятельности и ограничивают другие; Функция перераспределения доходов между членами общества и достижения социальной справедливости.
34944. Направления экономической теории 33.5 KB
  Вместе с Адамом Смитом они и представляю классическое направление экономической теории. Главные результаты классиков составившие наиболее крупные “бриллианты†экономически теории сводятся к следующим положениям: богатство общества и его стоимость создаются трудом притом не в какойто одной сфере деятельности а трудом как таковым трудом во всех отраслях хозяйства; законом экономической деятельности является закон трудовой стоимости; главным побудителем к экономической деятельности служит интерес; частный интерес людей...
34945. Общественное воспроизводство и движение продукта 24.5 KB
  Общественное воспроизводство и движение продукта Модель воспроизводства Коне Данная модель показывает что повторение процесса производства возможно при условии пропорциональности которая достигается на основе конкуренции и свободной игры цен то есть в данной модели государство не вмешивается в порядок Теория воспроизводства общественного капитала Маркса Уделил особое внимание пропорциям между: 1 подотделение средств производства 2 производство предметов потребления Конечная цель производственного процесса является удовлетворение...
34946. Олигополия: сущность и виды 38.5 KB
  Вовторых олигополию отличает от всех прочих структур тот факт что ей присуща взаимозависимость фирм. Взаимозависимость фирм означает что действия каждой из фирм затрагивают каждого из конкурентов и что фирмы осознают это. Например если какаялибо из фирм меняет цену или объем рекламы то это повлияет на величину продаж конкурентов. В то же время невозможно предсказать влияние на продажи фирмы изменения цены поставляемой ею продукции без того чтобы предварительно принять определенные предположения относительно характера реакции на...