dll
DLL DLL dll dll Circle dll DrawCircle CalculateCirdeArea Circle dll
DLL является библиотекой, которая динамически присоед&# 727s185h 1080;няется к использующей ее программе. Это означает, что, когда Вы создаете dll DLL dll
dll
\Windows\System ( Windows Me/98/95);
\Windows\System32 ( Windows XP/2000/NT);
Install dll Windows System dll
DLL Visual C++ и Visual Basic dll Visual C++, которая к нему обращается.
MyDLL cpp MyDLL def
Library MyDLL
Visual Studio Visual Studio):
File → New → Win32 Dinamic Link Library → Location ( \Library-13-2) → Project Name ( MyDLL).
MyDLL cpp
Пример MyDLL cpp
DllEntryPoint DLL
#include <Windows.h>
DllEntryPoint(HINSTANCE hDLL,
DWORD dwReason, LPVOID Reserved)
case DLL_PROCESS_DETACH:
}
return TRUE
}
MyDLL cpp DllEntryPoint DLL DLL DLL DllEntryPoint MyDLL dll
DllEntryPoint состоит из оператора switch
switch (dwReason)
case DLL_PROCESS_DETACH:
}
switch dwReason DllEntryPoint()
case DLL PROCESS ATTACH DLL присоед&# 727s185h 1080;няется к ехе-файлу (когда ехе-файл загружает DLL case DLL PROCESS ATTACH
case DLL PROCESS DETACH DLL отсоед&# 727s185h 1080;няется от ехе-файл. Например, когда ехе-файл, который использует DLL case DLL PROCESS DETACH case dll process detach
MyDll cpp
MyBeep -
MyDelay
MyBeep()
int MyBeep(DWORD frequency, //
DWORD duration)
MyDelay()
int MyDelay(long wait) //
MyDll.cpp:
MyDLL.cpp
#include <Windows.h>
DLL
int MyBeep(DWORD, DWORD);
int MyDelay(long);
DllEntryPoint() : DLL
DllEntryPoint(HINSTANCE hDLL,
DWORD dwReason, LPVOID Reserved)
case DLL_PROCESS_DETACH:
}
return TRUE;
}
int MyBeep(DWORD frequency, //
DWORD duration)
int MyDelay(long wait) //
MyDLL def
def MyDLL dll
LIBRARY mydll
CODE PRELOAD MOVEBLE DISCARDABLE
DATA PRELOAD SINGLE
EXPORTS
; ) DLL
DLL включены в библиотеку и «экспортируются» после загрузки библиотеки (оператор EXPORTS def
MyBeep
MyDelay
MyDLL def
def-файл для библиотеки MyDLL dll
LIBRARY mydll
CODE PRELOAD MOVEBLE DISCARDABLE
DATA PRELOAD SINGLE
EXPORTS
; ) DLL
MyBeep
MyDelay
DLL Ex Example
HINSTANCE gLibMyDLL NULL
MyBeep MyDLL dll
typedef int(*MYBEEP)(DWORD, DWORD);
MYBEEP MyBeep = NULL;
MyDelay() MyDLL.dll
typedef int(*MYDELAY)(long);
MYDELAY MyDelay = NULL;
DLL LoadLibrary
gLibMyDLL LoadLibrary "MYDLL DLL");
LoadLibrary
\Windows\System ( Windows Me/98/95);
\Windows\System32 ( Windows XP/2000/NT);
gLibMyDLL NULL
FARPROC GetProcAddress HMODULE hModule
LPCSTR lpProcName
hModule lpProcName NULL
MyBeep =(MYBEEP)GetProcAddress(gLibMyDLL,"MyBeep");
MyDelay=(MYDELAY)GetProcAddress(gLibMyDLL,"MyDelay");
DLL
DLL DLL
Mydialog rc
#include <Windows.h>
#include "Text.h"
MYMENU MENU
MYMENU ACCELERATORS
Соответственно, изменится и вспомогательный файл Text.h:
#define ID_SHOW 100
#define ID_RESET 101
#define ID_LOAD 102
#define ID_BEEP 104
define ID HELP 105
DLL
case ID LOAD
// Если файл MyDLL DLL
// сообщить
// пользователю и завершить эту функцию
if(gLibMyDLL != NULL)
MessageBox(hwnd,
"Библиотека MyDLL уже загружена",
"Внимание:",MB_OK);
else
}
// Получить адрес функции МуВеер()
// библиотеки MyDLL.dll
MyBeep MYBEEP GetProcAddress gLibMyDLL
"MyBeep");
// Получить адрес функции MyDelay()
// библиотеки MyDLL.dll
MyDelay MYDELAY GetProcAddress gLibMyDLL
"MyDelay");
InvalidateRect(hwnd,NULL,1); //
break;
case ID BEEP
if(MyDelay != NULL && MyBeep != NULL
&& gLibMyDLL != NULL)
else
MessageBox(hwnd,
"Причины: библиотека MyDLL "
"не загружена, либо "
"отсутствуют функции "
"MyBeep MyDelay ",
" :", MB_OK);
InvalidateRect(hwnd,NULL,1); //
break
// Демонстрация работы с библиотекой MyDLL,
#include <Windows.h>
#include <String.h>
#include <Stdio.h>
#include "Text.h"
LRESULT CALLBACK WindowFunc(HWND,UINT,WPARAM,LPARAM);
char szWinName[] = " "; //
char str[255]; // Буфер строки вывода
int X=0, Y=0; // Текущие координаты строки
int maxX, maxY; // Размеры экрана
HDC memdc; // DC виртуального окна
HBITMAP hbit; // Растр - это виртуальное окно
HBRUSH hbrush; //
HINSTANCE gLibMyDLL = NULL;
typedef int(*MYBEEP)(DWORD, DWORD);
MYBEEP MyBeep = NULL;
typedef int(*MYDELAY)(long);
MYDELAY MyDelay = NULL;
int WINAPI WinMain (HINSTANCE hThisInst,
HINSTANCE hPrevInst,
LPSTR lpszArgs,
int nWinMode)
return msg. wParam;
}
// Windows и получает в качестве параметров сообщения
LRESULT CALLBACK WindowFunc(HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
}
// Получить адрес функции МуВеер()
// библиотеки MyDLL.dll
MyBeep=(MYBEEP)
GetProcAddress(gLibMyDLL,
"MyBeep");
// Получить адрес функции MyDelay()
// библиотеки MyDLL.dll
MyDelay=(MYDELAY)
GetProcAddress(gLibMyDLL,
"MyDelay");
InvalidateRect(hwnd,NULL,1); //
break;
case ID_BEEP:
if(MyDelay != NULL && MyBeep != NULL
&& gLibMyDLL != NULL)
else
MessageBox(hwnd,
"Причины: библиотека MyDLL "
"не загружена, либо "
"отсутствуют функции "
"MyBeep MyDelay ",
" :", MB_OK);
InvalidateRect(hwnd,NULL,1); //
break;
case ID_HELP:
MessageBox(hwnd,"F2: \n"
"F3: В начала экрана\n"
"F4: Загрузить DLL \n"
"F5: Звуковой сигнал",
" ",MB_OK);
InvalidateRect(hwnd,NULL,1); //
break;
}
break;
case WM_PAINT: //
hdc=BeginPaint(hwnd,&paintstruct); // DC
// Теперь копируем растр из памяти на экран
BitBlt(hdc,0,0,maxX,maxY,memdc,0,0,SRCCOPY);
EndPaint(hwnd,&paintstruct); // DC
break;
case WM_DESTROY: // Завершение программы
DeleteDC(memdc); // Удалить виртуальное окно
PostQuitMessage(0);
break;
default:
// Все сообщения, не обрабатываемые в данной
// функции, направляются на обработку по
// умолчанию
return DefWindowProc(hwnd,message,
wParam,lParam);
return 0;
}
![]() |
MyDLL
|