Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС_Лаб5.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

Хід виконання роботи.

Виписуємо необхідні формули:

1) радіус кола, описаного навколо трикутника: ,

2) радіус кола, вписаного в трикутник: ,

Допоміжні формули:

3) площа трикутника : ,

4) периметр трикутника : ,

5) відстань між точками з координатами та :

.

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

Вибираємо консольний проект та задаємо ім’я бібліотеки:

Вибираємо Далі:

Вибираємо Application Type (Тип проекту) – DLL та Finish:

В менеджері файлів (Solution Explorer) проекту створено файли:

dllmain.cpp – це основна програма, з якої здійснюється запуск бібліотеки.

GeometyFunc.cpp – це файл з функціями бібліотеки.

В першому файлі нічого не пишемо, а в другому – записуємо реалізацію функцій.

2. Написання коду програми.

Текст програми з файлу GeometyFunc.cpp:

#include "stdafx.h"

#include <math.h>

// довжина сторони трикутника

extern "C" __declspec (dllexport) double dist(double x_p, double y_p, double x_k, double y_k)

{

return sqrt( pow((x_k - x_p), 2) + pow((y_k - y_p), 2) );

}

//периметр трикутника

extern "C" __declspec (dllexport) double perum(double side1, double side2, double side3)

{

return side1 + side2 + side3;

}

//площа трикутника

extern "C" __declspec (dllexport) double square(double side1, double side2, double side3)

{

double p = perum(side1, side2, side3);

double s = sqrt(p/2*(p/2-side1)*(p/2-side2)*(p/2-side3));

return s;

}

// радіус описаного кола

extern "C" __declspec (dllexport) double R(double side1, double side2, double side3)

{

return (side1*side2*side3)/(4*square(side1, side2, side3));

}

// радіус вписаного кола

extern "C" __declspec (dllexport) double r(double side1, double side2, double side3)

{

return square(side1, side2, side3)/perum(side1, side2, side3);

}

Текст програми з файлу dllmain.cpp (нічого не змінено):

// dllmain.cpp : Defines the entry point for the DLL application.

#include "stdafx.h"

BOOL APIENTRY DllMain( HMODULE hModule,

DWORD ul_reason_for_call,

LPVOID lpReserved

)

{

switch (ul_reason_for_call)

{

case DLL_PROCESS_ATTACH:

case DLL_THREAD_ATTACH:

case DLL_THREAD_DETACH:

case DLL_PROCESS_DETACH:

break;

}

return TRUE;

}

3. Побудова dll-бібліотеки.

Вибираємо Build – Build Solution. В результаті виконання цієї команди одержимо скомпонований dll-файл бібліотеки.

Відкриємо папку з проектом:

Зайдемо у папку Debug, у якій знаходиться dll-файл бібліотеки:

4. Створення програми, у якій буде використовуватись dll-бібліотека.

В менеджері файлів (Solution Explorer) натискаємо праву клавішу миші на назві рішення (Solution ‘GeometryFunc’ (1 project)).

Вибираємо Add – New Project.

Задаємо ім’я консольного проекту:

Далі все без змін.

О держимо 2 проекти в одному рішенні. Один проект – це бібліотека, а другий проект – це програма, яка використовує бібліотеку.

Додамо до основної програми lib-файл бібліотеки. Це потрібно для компоновки основної програми.

Права кнопка на папці Resource Files – Add - Existing Item…

У вікні вибираємо lib-файл та натискаємо Add.

Пишемо текст головної програми:

// GeomProgram.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include <conio.h>

#include <iostream>

using namespace std;

// ____________________________ Експорт функцій з Dll ______________________________

// довжина сторони трикутника

extern "C" __declspec(dllimport) double dist(double x_p, double y_p, double x_k, double y_k);

//периметр трикутника

extern "C" __declspec(dllimport) double perum(double side1, double side2, double side3);

//площа трикутника

extern "C" __declspec(dllimport) double square(double side1, double side2, double side3);

// радіус описаного кола

extern "C" __declspec(dllimport) double R(double side1, double side2, double side3);

// радіус вписаного кола

extern "C" __declspec(dllimport) double r(double side1, double side2, double side3);

// _________________________ Основна програма ____________________________________

int _tmain(int argc, _TCHAR* argv[])

{

// координати вершин трикутника

double x1, x2, x3, y1, y2, y3;

// сторони трикутника

double a, b, c;

// вводимо координати

cout << "Vvedit' koordunatu verwun trukytnuka:" << endl;

cout << " x1 = "; cin >> x1;

cout << " y1 = "; cin >> y1;

cout << " x2 = "; cin >> x2;

cout << " y2 = "; cin >> y2;

cout << " x3 = "; cin >> x3;

cout << " y3 = "; cin >> y3;

// обчислюємо сторони

a = dist(x1, y1, x2, y2);

b = dist(x2, y2, x3, y3);

c = dist(x1, y1, x3, y3);

// обчислюємо та виводимо радіуси описаного та вписаного кіл

// використовуємо імпортовані функції з dll-бібліотеки.

cout << "Radiys opusanogo kola = " << R(a, b, c) << endl;

cout << "Radiys vpusanogo kola = " << r(a, b, c) << endl;

_getch();

return 0;

}

Натискаємо праву кнопку миші на проекті GeomProg та вибираємо Set as StartUp Project:

Запускаємо програму: F5.

Результат роботи програми:

Тепер ехе-файл програми можна використовувати разом з dll-файлом.

Для перевірки зайдемо у папку Debug рішення та скопіюємо ці файли в іншу папку:

Програма запускається разом з бібліотекою.

Проте, якщо видалити dll-файл з папки e:\testdll, то програма не запуститься: