ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 11.06.2019

Просмотров: 110

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Лабораторная работа № 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;

}


Результат:






















Смотрите также файлы