69995

РАЗРАБОТКА ДИНАМИЧЕСКИ ПОДКЛЮЧАЕМЫХ БИБЛИОТЕК

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

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

Цель: Ознакомление с одним из наиболее важным структурным элементом Windows - библиотеками динамической компоновки (Dynamic Link Libraries, DLL), получение практических навыков по созданию динамических библиотек.

Русский

2014-10-13

63 KB

2 чел.

Министерство образования и науки Украины

Харьковский Национальный Университет Радиоэлектроники

Кафедра ЭВМ

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

Тема: «РАЗРАБОТКА ДИНАМИЧЕСКИ ПОДКЛЮЧАЕМЫХ БИБЛИОТЕК»

Выполнил:                                                                      Проверил:

ст. гр. КИ-08-4                                                                Бугрий А. Н.

Кравец Артём Валерьевич

2009

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

Цель: Ознакомление с одним  из наиболее важным структурным элементом Windows - библиотеками динамической компоновки (Dynamic Link Libraries, DLL), получение практических навыков по созданию динамических библиотек.

Задание:

Вариант 6

Создать динамически подключаемую библиотеку функций поиска минимума и максимума массива целых чисел (в функцию передается указатель на массив и число элементов массива). Использовать созданную DLL в другой программе.

Листинг:

// dll

    // funlib.h

#define EXPORT extern "C" __declspec(dllexport)

EXPORT int CALLBACK Max(int*, int);

EXPORT int CALLBACK Min(int*, int);

    // funlib.cpp

#include <windows.h>

#include <string.h>

#include "funlib.h"

int WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)

{

          return TRUE;

}

EXPORT int CALLBACK Min(int*mas,int n)

{

 int min, i;

min = mas[0];

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

 if(mas[i]<min)

  min = mas[i];

 return min;

}

EXPORT int CALLBACK Max(int*mas,int n)

{

 int max, i;

max = mas[0];

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

 if(mas[i]>max)

  max = mas[i];

 return max;

}

// main_proga

#include "stdafx.h"

#include "Laba3_dll.h"

#define MAX_LOADSTRING 100

const int n=8;

int mas[n], max, min;

// Глобальные переменные:

HINSTANCE hInst;        // текущий экземпляр

TCHAR szTitle[MAX_LOADSTRING];     // Текст строки заголовка

TCHAR szWindowClass[MAX_LOADSTRING];   // имя класса главного окна

// Отправить объявления функций, включенных в этот модуль кода:

ATOM    MyRegisterClass(HINSTANCE hInstance);

BOOL    InitInstance(HINSTANCE, int);

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);

HWND hWnd;

HINSTANCE hL;

typedef int (CALLBACK * Min)(int*mas, int n);

Min FunMin;

typedef int (CALLBACK * Max)(int*mas, int n);

Max FunMax;

int APIENTRY _tWinMain(HINSTANCE hInstance,

                    HINSTANCE hPrevInstance,

                    LPTSTR    lpCmdLine,

                    int       nCmdShow)

{

srand((unsigned)time( NULL ));

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

 mas[i] = rand()%100;

hL=LoadLibrary("2.dll");

 if(hL == NULL)

 MessageBox(hWnd, "Не удалось подключить dll","Error", MB_OK);

   FunMax = (Max)GetProcAddress(hL,(LPCSTR)1);

FunMin = (Min)GetProcAddress(hL,(LPCSTR)2);

min = FunMin(mas,n);

max = FunMax(mas,n);

FreeLibrary(hL);

UNREFERENCED_PARAMETER(hPrevInstance);

UNREFERENCED_PARAMETER(lpCmdLine);

 // TODO: разместите код здесь.

MSG msg;

HACCEL hAccelTable;

 // Инициализация глобальных строк

LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);

LoadString(hInstance, IDC_LABA3_DLL, szWindowClass, MAX_LOADSTRING);

MyRegisterClass(hInstance);

 // Выполнить инициализацию приложения:

 if (!InitInstance (hInstance, nCmdShow))

{

 return FALSE;

}

hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_LABA3_DLL));

 // Цикл основного сообщения:

 while (GetMessage(&msg, NULL, 0, 0))

{

 if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))

 {

  TranslateMessage(&msg);

  DispatchMessage(&msg);

 }

}

 return (int) msg.wParam;

}

ATOM MyRegisterClass(HINSTANCE hInstance)

{

WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style   = CS_HREDRAW | CS_VREDRAW;

wcex.lpfnWndProc = WndProc;

wcex.cbClsExtra  = 0;

wcex.cbWndExtra  = 0;

wcex.hInstance  = hInstance;

wcex.hIcon   = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_LABA3_DLL));

wcex.hCursor  = LoadCursor(NULL, IDC_ARROW);

wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);

wcex.lpszMenuName = MAKEINTRESOURCE(IDC_LABA3_DLL);

wcex.lpszClassName = szWindowClass;

wcex.hIconSm  = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

 return RegisterClassEx(&wcex);

}

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

  hInst = hInstance; // Сохранить дескриптор экземпляра в глобальной переменной

  hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,

     CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

  if (!hWnd)

  {

     return FALSE;

  }

  ShowWindow(hWnd, nCmdShow);

  UpdateWindow(hWnd);

  return TRUE;

}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{

 int wmId, wmEvent;

PAINTSTRUCT ps;

HDC hdc;

 static char str[30];

 static char str1[30];

 static char str2[30];

wsprintf(str,"Массив = %i %i %i %i %i %i %i %i",mas[0],mas[1],mas[2],mas[3],mas[4],mas[5],mas[6],mas[7]);

wsprintf(str1,"Mинимум массива - %i",min);

wsprintf(str2,"Максимум массива - %i",max);

 switch (message)

{

 case WM_COMMAND:

  wmId    = LOWORD(wParam);

  wmEvent = HIWORD(wParam);

  // Разобрать выбор в меню:

  switch (wmId)

  {

  case IDM_ABOUT:

   DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);

   break;

  case IDM_EXIT:

   DestroyWindow(hWnd);

   break;

  default:

   return DefWindowProc(hWnd, message, wParam, lParam);

  }

  break;

 case WM_PAINT:

  hdc = BeginPaint(hWnd, &ps);

  TextOut(hdc, 50, 50, str, strlen(str));

  TextOut(hdc, 50, 75, str1, strlen(str1));

  TextOut(hdc, 50, 100, str2, strlen(str2));

  EndPaint(hWnd, &ps);

  break;

 case WM_DESTROY:

  PostQuitMessage(0);

  break;

 default:

  return DefWindowProc(hWnd, message, wParam, lParam);

}

 return 0;

}

// Обработчик сообщений для окна "О программе".

INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)

{

UNREFERENCED_PARAMETER(lParam);

 switch (message)

{

 case WM_INITDIALOG:

 return (INT_PTR)TRUE;

 case WM_COMMAND:

 if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)

 {

  EndDialog(hDlg, LOWORD(wParam));

  return (INT_PTR)TRUE;

 }

 break;

}

 return (INT_PTR)FALSE;

}

Результат:

Выводы: В этой лабораторной работе я ознакомился с одним  из наиболее важным структурным элементом Windows - библиотеками динамической компоновки (Dynamic Link Libraries, DLL), получил практические навыки по созданию динамических библиотек.


 

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

54023. I need a book. At the library 101.5 KB
  Teacher: Right you are. A book is a main source of knowledge. It is impossible to imagine our life without books. They play an important role in educating, upbringing and help us to get useful information. Where can we get books?
54024. Life of a Society. Inventors and Inventions 52.5 KB
  First I intended to use canvas to make tents and wagon coverings. But miners complained that their ordinary trousers wore out too quickly. So, I thought and thought and …
54025. Я вибираю життя без шкідливих звичок. Розвиток усного мовлення з теми 81.5 KB
  In 1870 the British Government adopted a law: every packet of cigarette must have a health warning on it. Now we have such a law in Ukraine. But very often a great number of modern advertisements show us beautiful girls or boys who smoke. And many teenagers want to imitate them. There are some rules, which don’t allow people to smoke in public places, such as cinemas, theatres, public transport etc.
54026. Ліквідація Української козацької держави 52.5 KB
  Мета: ознайомити учнів з подіями що передували процесу ліквідації Української козацької держави; розвивати навички роботи з історичною картою; вміння визначати причиннонаслідкові звязки подій; Виховувати в учнів почуття патріотизму інтересу і поваги до історичного минулого своєї держави. Після цього уроку учні зможуть: розкривати зміст термінів Малоросія наказний гетьман кріпацтво; називати прізвища видатних осіб цього часу; показувати на карті підручника територію Гетьманщини Запорозької Січі; розповідати про...
54027. Цікава лінгвістика 31.5 KB
  Другорядні члени речення. Напишіть власний твір про однорідні члени речення уявивши велику світлу споруду в якій дружно живе сімя однорідних членів речення суворо дотримуючись законів співжиття як люди у суспільстві. Другорядні члени речення Плин життя завжди вимагає змін. Ой варто було б побачити що сталося із другорядними членами речення.
54028. Цікаві завдання з української мови для учнів шостого класу 401.5 KB
  Цікаві завдання що включені до розповіді про подорож у пошуках скарбів різноманітні ігрові ситуації допоможуть дітям легше засвоїти граматичні категорії що стосуються зазначених тем. Вступ Призначення цієї книги - сприяти засвоєнню тем Іменник та Прикметник зокрема завдання побудовано таким чином щоб сформувати уміння визначати граматичні категорії слів зазначених частин мови розвивати словниковий запас учня. Завдання побудовано в ігровій формі їх можна виконувати як поодинці так і удвох з товаришем тоді мандрівку сторінками...
54029. Урочиста лінійка присвячена врученню свідотства про базову середню освіту в 9 класі 53 KB
  Хай здійсняться всі ваші бажання Ми ласкаво запрошуєм вас Список учнів ведуча зачитує список виходять діти встають на райдугу СПИСОК УЧНІВ 9 КЛАСУ 1. Класний керівник 9 класу 2. Право підняти державний прапор України надається учням 9 класу та Звучить гімн України. Довгополому надається учням 9 класу та Ведуча.
54030. Розробка уроку з музичного мистецтва для 7 класу 183 KB
  Добрим будь щедрим будь І з мистецтвом в добрий путь Мотивація навчальної діяльності Учитель. Учитель звертає увагу на карту України на якій нотами позначені місця повязані з темою уроку Полтава Львів Запоріжжя Київ карта України. Учитель. Як ви вважаєте які риси характеру Наталки передає її пісня учні за допомогою вчителя дають характеристику образу Наталки одночасно заповнюючи першу графу таблиці Характеристика образу Наталки Полтавки Герой Характеристика образу Музична характеристика героя Наталка Полтавка Проста...