Добавил:
abhai2013@gmail.com Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Lab10

.docx
Скачиваний:
7
Добавлен:
30.06.2018
Размер:
33.44 Кб
Скачать

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

Студента ИТ 14-1 Красовского Абхая

Создание и использование динамически компонуемых библиотек функций

Вариант №9

Цель: Получить навыки в следующих предметных областях:

  • создание динамически компонуемых библиотек функций (Dynamic Link-Library);

  • загрузка динамически компонуемых библиотек и вызов их функций с использованием функций WinAPI

Индивидуальное задание

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

Код программы:

#include <iostream>

#include <conio.h>

#include <windows.h>

using namespace std;

void main()

{

setlocale(LC_ALL, "rus");

HMODULE hDLL;

double (*fx)(double, double), (*fy)(double, double);

if (hDLL = LoadLibrary("DLL.dll"))

cout << "Библиотека загружена" << endl;

fx = (double (*) (double, double))GetProcAddress(hDLL, "fx");

fy = (double (*) (double, double))GetProcAddress(hDLL, "fy");

cout << "x = " << fx(10, 10) << endl;

cout << "y = " << fy(15, 10) << endl;

if (FreeLibrary(hDLL)) cout << "Библиотека выгружена" << endl;

_getch();

}

Код DLL:

// dllmain.cpp: определяет точку входа для приложения DLL.

#include "stdafx.h"

#include <windows.h>

#include <math.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;

}

extern "C" _declspec(dllexport) double x = 0; // модификатор extern "C" указывает, что функция или переменная должна иметь имя в стиле языка С

extern "C" _declspec(dllexport) double y = 0; // модификатор _declspec(dllexport) указывает, что функция ии переменная будет экспортироватся из DLL

extern "C" _declspec(dllexport) double fx(double a, double t)

{

x = 2 * a * cos(t) - a * cos(2 * t);

return x;

}

extern "C" _declspec(dllexport) double fy(double a, double t)

{

y = 2 * a * sin(t) - a * sin(2 * t);

return y;

}

Результат:

Соседние файлы в предмете Операционные системы