69995

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

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

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

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

Русский

2014-10-13

63 KB

1 чел.

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

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

Кафедра ЭВМ

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


 

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

38600. Основні передумови вдосконалення ротаційних граблів ГУР-4,2 1.57 MB
  Основні технології заготівлі сіна, що тепер застосовують, — це заготівля розсипного сіна та пресованого. У господарствах АПК України переважає перша технологія. Вона нескладна, дає змогу обходитися комплексом більш простих машин. Проте водночас вона має низку істотних вад, основними з яких є значні затрати праці, особливо ручної, та витрати енергії.
38601. ФОРМИРОВАНИЕ КОММУНИКАТИВНОЙ КОМПЕТЕНЦИИ МЛАДШИХ ШКОЛЬНИКОВ ВО ВНЕУЧЕБНОЙ ДЕЯТЕЛЬНОСТИ 361.5 KB
  Отечественные ученые, определяя младший школьный возраст как важный этап социализации и развития коммуникативных умений, считают, что ключом к успешной деятельности, ресурсом эффективности и благополучия будущей жизни ребенка, является коммуникативная компетенция
38602. Актуальные налоговые теории. Промысловое налогообложение 40.62 KB
  Под налоговыми теориями следует понимать ту или иную систему научных знаний о сути и природе налогов, их месте, роли и значении в экономической и социально-политической жизни общества. Иными словами налоговые теории представляют собой различные модели построения налоговых систем государства в зависимости от признания за налогами того или иного назначения.
38603. Технологические основы социальной профилактики наркозависимости в образовательных учреждениях 492.5 KB
  Методические основы выявления эпизодов потребления наркотиков детьми и подростками. Ковальчук выделили причины влияющие на употребление наркотиков детьми и подростками: социальноэкономические конституциональнобиологические социальные индивидуальнопсихологические. До начала XX века практически не существовало ограничений на производство и потребление наркотиков. Но тем не менее распространение наркотиков продолжалось.
38604. Состояние и перспективы развития молочного скотоводства в КСУП «Добрушское» Добрушского района Гомельской области 340.5 KB
  4 Резервы повышения экономической эффективности производства молока 30 Безопасность жизнедеятельности 35 4 Экологическое обоснование работы 37 Выводы...
38605. Види взаємодії людини з природним середовищем та їх наслідки у звязку з забрудненнями стічними водами ПАТ Сєверодонецьке Обєднання Азот 946.5 KB
  Головна ж теоретична і практична задача екології розкрити загальні закономірності організації життя і на цій основі розробити принципи раціонального використання природних ресурсів в умовах все зростаючого впливу людини на біосфер Взаємодія людського суспільства і природи стало однією з найважливіших проблем сучасності оскільки положення яке складається у відносинах людини з природою часто стає критичним: вичерпуються запаси прісної води і корисних копалин нафти газу кольорових металів тощо погіршується стан ґрунтів водного і...
38606. Разработка метода синтеза третбутилзамещенных хиноксалинопорфиразинов 580.5 KB
  В дипломе представлен обзор литературы об особенностях комплексных соединений природных и синтетических порфиринов, о строении и спектральных свойствах, а также о способах синтеза фталоцианина и его структурных аналогов, экспериментальная часть и обсуждение результатов.
38607. ВПЛИВ ТРИВОЖНОСТІ НА ПРОЯВИ ОБМАНУ У ДОШКІЛЬНОМУ ВІЦІ 2.28 MB
  У нашому дослідженні під тривогою розуміється психічний стан, що виникає в ситуаціях невизначеної небезпеки, функціональне попередження про можливу небезпеку і спонукання людини до дослідження оточуючої дійсності з метою виявлення загрозливих об’єктів (за В. Вікторовою).
38608. ТЕХНИЧЕСКАЯ ПОДГОТОВКА ЮНЫХ ОРИЕНТИРОВЩИКОВ 12 – 13 ЛЕТ 3.77 MB
  С помощью карты начальник дистанции планирует трассы оборудует их на местности. Все спортивные карты должны оформляться в условных знаках и обладать определенными качествами: точность информативность объективность читаемость и полнота содержания Зубков С. У спортивной карты можно выделить две функции. Его применение служит двум целям – ориентирование карты и выдерживание направления на местности.