69995

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

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

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

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

Русский

2014-10-13

63 KB

3 чел.

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

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

Кафедра ЭВМ

Лабораторная работа №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), получил практические навыки по созданию динамических библиотек.


 

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

48124. Организация труда. Учебное пособие 780.5 KB
  Управление трудовыми ресурсами Днепропетровск 2003 Организация труда опорный конспект лекций: Учебное пособие. Опорный конспект лекций подготовлен в соответствии с учебной программой курса Организация труда. Раскрыты сущность и краткое содержание основных понятий организации труда.
48125. ЕКОНОМІЧНЕ МИСЛЕННЯ 3.05 MB
  По суті економічна свідомість це відображення економічного буття суспільства тобто виробництва організації й розподілу економічних благ. Причому у ньому відображені насамперед умови господарського життя людей відносини між класами соціальними групами із приводу власності на засоби виробництва. Саме вони змушують людину постійно вдосконалювати варіанти виробництва шукати нові шляхи створення нових благ. З іншого боку щоб ці потреби задовольнити необхідні ресурси які в кожний даний момент часу обмежені тобто їх завжди менше ніж...
48126. Основи демократії 510 KB
  Тема: Права людини і громадянина Права й обов'язки людини і громадянина 29 ЛекціяПрава людини та їх забезпечення в умовах суспільних змін: Навч. У ранній період свого існування в Древній Греції демократія розумілася як особлива форма або різновид організації держави при якій владою володіє не одна особа як при монархії тиранії і не група осіб як при аристократії олігархії а всі громадяни що користуються рівними правами на керування державою.
48127. ОСНОВИ ЕТИКИ 1.18 MB
  Тим часом чим гостріші проблеми постають перед нами чим непевне ніші перспективи на майбутнє тим невідворотніше прагнення сучасної людини знайти якийсь твердий грунт піл ногами те заради чого варто було б жити. Предметом виступають моральноетичні аспекти світогляду сучасної людини. Науку про етичні чесноти особистісні якості достоїнства характеру людини Аристотель назвав ethice {етика. За аналогією у латинській мові від терміна mos moris крій одягу й мода звичай і порядок вдача і характер людини давньоримський...
48128. Основи менеджменту та маркетингу 1.28 MB
  Поняття про організації. Всі організації мають загальні характеристики. 1 всі організації використовують чотири основних види ресурсів: людські ресурси; фінансові ресурси; фізичні ресурси сировина устаткування тощо; інформаційні ресурси. розподіл праці в організації.
48129. ОСНОВИ НАУКОВИХ ДОСЛІДЖЕНЬ 954 KB
  У студентів має сформуватися система знань про загальнонаукові і специфічні методи наукового дослідження основні категорії і принципи наукового пізнання. Метою вивчення дисципліни є формування у студентів системи знань про загальнонаукові і специфічні методи наукового дослідження про основні категорії і принципи наукового дослідження закріплення поглиблення розширення і систематизація знань отриманих під час аудиторних занять; самостійне оволодіння новим навчальним матеріалом формування умінь і навичок самостійної розумової праці...
48130. Реклама і звязки з громадськістю 655.5 KB
  Очевидно, що діяльність зі звязків з громадськістю передбачає багатосторонню та складну роботу, що вимагає від фахівців в цій області широкого комплексу знань і навичок
48132. Теорія держави і права 1.45 MB
  Відомо, що держава існувала не завжди, а її утворенню передував первіснообщинний устрій, який являв собою стародавній тип колективного виробництва і був результатом слабкості окремої людини перед навколишнім природним середовищем. З моменту виникнення колективної праці труд окремої людини стає частиною спільної праці всього колективу общини, яка по суті була економічною формою організації людей