SlideShare uma empresa Scribd logo
1 de 23
БИБЛИОТЕКИ
ПРОГРАММИРОВАНИЯ
Михаил Кройтор
Содержание
 Что такое библиотека программирования
 Виды библиотек программирования
 Структура библиотек программирования
 Особенности библиотек программирования
 Рекомендации
 Разработка библиотек программирования
 Статические библиотеки
 Динамические библиотеки
 Использование библиотек программирования
 Неявное связывание
 Явное связывание
Библиотеки Программирования
Под библиотеками программирования
понимают архивы ресурсов программирования,
таких как функции, классы, объекты, константы и
различные переменные.
В частности, константами могут быть заданы графические или
мультимедийные данные.
Виды библиотек программирования
 Статические библиотеки
 При компиляции в программу вставляются куски
объектного кода из библиотеки, представляющие
функцию (класс или другой ресурс).
 Динамические библиотеки
 При компиляции в программу вставляются вызовы
функций (ссылки на ресурсы) из динамической
библиотеки.
Структура библиотек программирования
 Заголовочный
файл
 Статическая
библиотека
 Заголовочный
файл
 Библиотека
импорта
 Динамическая
библиотека
Статические библиотеки Динамические библиотеки
*.h
*.lib
(*.a)
*.h
*.lib
(*.a)
*.dll
(*.so)
Особенности библиотек программирования
 В программу включается код
только используемых
функций.
 Программа не зависит от
наличия библиотек в ОС.
 Занимают относительно мало
места в О.П.
 Большой размер программ.
 В случает обновления
библиотеки требуется
перекомпиляция программы.
 Программа загружает в
оперативную память всю
используемую dll.
 Несколько программ работает
с одной dll одновременно.
 Маленький размер программ
 Требует наличие dll в ОС.
 Возможно обновление версии
dll без перекомпиляции
программы.
Статические библиотеки Динамические библиотеки
Рекомендации
 Если библиотека редкая или нестандартная,
лучше использовать статическую компоновку
программы.
 Если библиотека широко распространена или
стандартная, то рекомендуется использовать
динамическую компоновку программы.
 Желательно создавать обе версии библиотек: и
динамическую, и статическую.
Разработка библиотек программирования
Разработка
похожа на
разработку
обычного
приложения
Статические библиотеки:
заголовочные файлы
#ifndef _GEOMETRY_H_
#define _GEOMETRY_H_
struct point{
double x, y;
point();
point(double, double);
};
struct line{
double a, b, c;
line();
line(double, double, double);
};
#endif
Заголовочные файлы должны быть
защищены от повторного включения
директивами препроцессора:
#ifndef A_CONSTANT
#define A_CONSTANT
#endif
Microsoft VC++ (+ Intel Compiler)
позволяют использовать директиву
#pragma once
Статические библиотеки: исходники
#include "geometry.h"
point::point(): x(0), y(0) {}
point::point(double p1, double p2)
: x(p1), y(p2) {}
line::line(): a(0), b(0), c(0) {}
line::line(double p1, double p2, double p3)
: a(p1), b(p2), c(p3) {}
Исходные файлы пишутся как обычно, без всяких особенностей
Динамические библиотеки:
заголовочные файлы
#ifndef _GEOMETRY_H_
#define _GEOMETRY_H_
#define DLLEXPORT __declspec(dllexport)
struct DLLEXPORT point{
double x, y;
point();
point(double, double);
};
struct DLLEXPORT line{
double a, b, c;
line();
line(double, double, double);
bool contains(const point&) const;
};
DLLEXPORT bool contains(const line&, const point&);
#endif
Добавляется указание
(макрос) на экспорт
структур и функций
Cpp файлы остаются
неизменными
Динамические библиотеки:
файлы определения модулей
Используются для
определения функций на
экспорт вместо
__declspec(dllexport)
MODULE mylib
EXPORTS
min @1
isPrime @2
nope @3 ; no operation
Динамические библиотеки:
точка входа
 Динамические библиотеки могут иметь
точку входа (использует windows.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;
}
Использование библиотек
программирования
 Статическая линковка
 Динамическое неявное связывание
 Динамическое явное связывание
Линковка статических библиотек и
неявное связывание динамических
библиотек совпадают по
реализации.
Статическая линковка
geometry.h
geometry.lib
Скопировать заголовочный файл
в папку include, библиотеку в lib
Подключение библиотеки
пользователя
Указать
относительный /
абсолютный путь до
заголовочного файла.
Указать в свойствах
путь до библиотеки
Подключение библиотеки при
помощи комментария компилятору
#include "../geometry/geometry.h"
#pragma comment(lib, "../Debug/Geometry.lib")
#include <iostream>
int main(){
plane::point p(1, 0), p2(1, 2);
//plane::line l(1, -1, 0);
//std::cout << l.contains(p);
std::cout << "distance from " << p << " and " << p2 << " is "
<< plane::distance(p, p2) << std::endl;
return 0;
}
Явное связывание
 Windows.h
 HMODULE WINAPI LoadLibrary(LPCTSTR
lpFileName);
 BOOL WINAPI FreeLibrary(HMODULE hModule);
 FARPROC WINAPI GetProcAddress(HMODULE
hModule, LPCSTR lpProcName);
Явное связывание
#include <Windows.h>
#include <iostream>
int main(){
HMODULE hMdl = LoadLibrary(L"geometry");
if(hMdl != NULL){
std::cout << "Library 'geometry' is loaded" << std::endl;
}
else{
std::cout << "Library 'geometry' is not loaded" << std::endl;
}
return 0;
}
 Загрузка библиотеки в нужный
момент при помощи функции
LoadLibrary
 Используется WinAPI (
заголовочный файл windows.h)
Использование функции из dll
Библиотеку dll, загружаемую при
помощи LoadLibrary, можно
использовать без библиотеки
импорта.
Пусть в mymath.dll определены
функции:
#pragma once
typedef unsigned long long u64;
u64 factorial(u64);
bool isSimple(u64);
#include <Windows.h>
#include <iostream>
typedef bool (*pfunc)(unsigned long long);
int _tmain(int argc, _TCHAR* argv[]){
HMODULE hMdl = LoadLibrary(L"mymath");
if(hMdl != NULL){
std::cout << "library is loaded" << std::endl;
pfunc IsPrime = (pfunc)GetProcAddress(hMdl, "isSimple");
if(IsPrime != NULL)
std::cout << "number " << 997 << " is "
<<(IsPrime(997) ? "prime" : "composed")<<std::endl;
else
std::cout << "function not found" << std::endl;
} else{
std::cout << "error library loading" << std::endl;
}
return 0;
}
Ресурсы из dll
 Windows.h
 LPTSTR MAKEINTRESOURCE(WORD
wInteger);
 HRSRC WINAPI FindResource(HMODULE
hModule, LPCTSTR lpName, LPCTSTR pType);
 HGLOBAL WINAPI LoadResource(HMODULE
hModule, HRSRC hResInfo);
 HBITMAP LoadBitmap(HINSTANCE hInstance,
LPCTSTR lpBitmapName);
 int WINAPI LoadString(HINSTANCE hInstance,
UINT uID, LPTSTR lpBuffer, int nBufferMax);
Ресурсы из dll
Использование ресурса из dll
#include <Windows.h>
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
HMODULE hMdl = LoadLibrary(L"mymath");
if(hMdl != NULL){
LPTSTR str = new wchar_t[1024];
LoadString(hMdl, 101, str, 1024);
MessageBox(NULL, str, 0, 0);
}
else{
std::cout << "error library loading" << std::endl;
}
return 0;
}
Поиск ресурса осуществляется
по идентификатору

Mais conteúdo relacionado

Mais procurados

Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Platonov Sergey
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Dima Dzuba
 
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building BlocksЛекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Mikhail Kurnosov
 

Mais procurados (20)

Субъекторная модель
Субъекторная модельСубъекторная модель
Субъекторная модель
 
Подпрограммы
ПодпрограммыПодпрограммы
Подпрограммы
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
 
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building BlocksЛекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
 
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.
 
C++ Базовый. Занятие 03.
C++ Базовый. Занятие 03.C++ Базовый. Занятие 03.
C++ Базовый. Занятие 03.
 
Программирование на языке C Sharp (СИ решетка)
Программирование на языке C Sharp (СИ решетка)Программирование на языке C Sharp (СИ решетка)
Программирование на языке C Sharp (СИ решетка)
 
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
 
Язык программирования C#
Язык программирования C#Язык программирования C#
Язык программирования C#
 
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
Александр Тарасенко, Использование python для автоматизации отладки С/C++ код...
 
Антон Полухин, Немного о Boost
Антон Полухин, Немного о BoostАнтон Полухин, Немного о Boost
Антон Полухин, Немного о Boost
 
C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.
 
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptСергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
 
Python. Обработка ошибок
Python. Обработка ошибокPython. Обработка ошибок
Python. Обработка ошибок
 
Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10Объектно-ориентированное программирование. Лекции 9 и 10
Объектно-ориентированное программирование. Лекции 9 и 10
 
Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
 Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ... Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
 
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
 
Построение компилятора на базе LLVM — Павел Сычев
 Построение компилятора на базе LLVM — Павел Сычев Построение компилятора на базе LLVM — Павел Сычев
Построение компилятора на базе LLVM — Павел Сычев
 

Destaque

обработка исключений в Java
обработка исключений в Javaобработка исключений в Java
обработка исключений в Java
metaform
 

Destaque (15)

Введение в MFC
Введение в MFCВведение в MFC
Введение в MFC
 
Обзор MS.Net Framework
Обзор MS.Net FrameworkОбзор MS.Net Framework
Обзор MS.Net Framework
 
3. biblioteci de programare
3. biblioteci de programare3. biblioteci de programare
3. biblioteci de programare
 
шахматная композиция
шахматная композицияшахматная композиция
шахматная композиция
 
обработка исключений в Java
обработка исключений в Javaобработка исключений в Java
обработка исключений в Java
 
создание живых сайтов
создание живых сайтовсоздание живых сайтов
создание живых сайтов
 
архитектура приложений mfc
архитектура приложений mfcархитектура приложений mfc
архитектура приложений mfc
 
mfc событийное программирование
mfc событийное программированиеmfc событийное программирование
mfc событийное программирование
 
Revizuirea framework .NET
Revizuirea framework .NETRevizuirea framework .NET
Revizuirea framework .NET
 
0.0 particularitatile programarii с++
0.0 particularitatile programarii с++0.0 particularitatile programarii с++
0.0 particularitatile programarii с++
 
mfc introducere
mfc introduceremfc introducere
mfc introducere
 
C++ теория
C++ теорияC++ теория
C++ теория
 
Reações ácido base
Reações ácido baseReações ácido base
Reações ácido base
 
Open Source Software in Libraries
Open Source Software in LibrariesOpen Source Software in Libraries
Open Source Software in Libraries
 
Сети для самых маленьких. Часть восьмая. BGP и IP SLA
Сети для самых маленьких. Часть восьмая. BGP и IP SLAСети для самых маленьких. Часть восьмая. BGP и IP SLA
Сети для самых маленьких. Часть восьмая. BGP и IP SLA
 

Semelhante a библиотеки программирования

2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
JSC “Arcadia Inc”
 
C++ осень 2013 лекция 7
C++ осень 2013 лекция 7C++ осень 2013 лекция 7
C++ осень 2013 лекция 7
Technopark
 
Evgeny Rybak Presentation
Evgeny Rybak PresentationEvgeny Rybak Presentation
Evgeny Rybak Presentation
sef2009
 

Semelhante a библиотеки программирования (20)

C# Desktop. Занятие 04.
C# Desktop. Занятие 04.C# Desktop. Занятие 04.
C# Desktop. Занятие 04.
 
Caché Native Access. InterSystems Meetup 2014
Caché Native Access. InterSystems  Meetup 2014Caché Native Access. InterSystems  Meetup 2014
Caché Native Access. InterSystems Meetup 2014
 
лекция 3
лекция 3лекция 3
лекция 3
 
Александр Сомов "C++: препроцессор, компилятор, компоновщик"
Александр Сомов "C++: препроцессор, компилятор, компоновщик"Александр Сомов "C++: препроцессор, компилятор, компоновщик"
Александр Сомов "C++: препроцессор, компилятор, компоновщик"
 
Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...
Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...
Использование библиотеки анализа кода OpenC++: модификация, улучшение, исправ...
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.
 
Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++
 
о некоторых вопросах бинарной совместимости в C++
о некоторых вопросах бинарной совместимости в C++о некоторых вопросах бинарной совместимости в C++
о некоторых вопросах бинарной совместимости в C++
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциям
 
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
 
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
 
C++ осень 2013 лекция 7
C++ осень 2013 лекция 7C++ осень 2013 лекция 7
C++ осень 2013 лекция 7
 
ОПК № 2 – Алгоритмы и структуры данных, язык C
ОПК № 2 – Алгоритмы и структуры данных, язык CОПК № 2 – Алгоритмы и структуры данных, язык C
ОПК № 2 – Алгоритмы и структуры данных, язык C
 
Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!Взломать Web-сайт на ASP.NET? Сложно, но можно!
Взломать Web-сайт на ASP.NET? Сложно, но можно!
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language Runtime
 
Evgeny Rybak Presentation
Evgeny Rybak PresentationEvgeny Rybak Presentation
Evgeny Rybak Presentation
 
Пакетный менеджер CrossPM: упрощаем сложные зависимости | Александр Ковалев
Пакетный менеджер CrossPM: упрощаем сложные зависимости | Александр КовалевПакетный менеджер CrossPM: упрощаем сложные зависимости | Александр Ковалев
Пакетный менеджер CrossPM: упрощаем сложные зависимости | Александр Ковалев
 
Интегрированная среда разработки для функционального языка Refal
Интегрированная среда разработки для функционального языка RefalИнтегрированная среда разработки для функционального языка Refal
Интегрированная среда разработки для функционального языка Refal
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
 
Basic principles of projects description in VHDL - ENTITY, ARCHITECTURE, LIBR...
Basic principles of projects description in VHDL - ENTITY, ARCHITECTURE, LIBR...Basic principles of projects description in VHDL - ENTITY, ARCHITECTURE, LIBR...
Basic principles of projects description in VHDL - ENTITY, ARCHITECTURE, LIBR...
 

Mais de mcroitor

Mais de mcroitor (20)

09 server mgmt_ii_ro
09 server mgmt_ii_ro09 server mgmt_ii_ro
09 server mgmt_ii_ro
 
09 server mgmt_ii_ru
09 server mgmt_ii_ru09 server mgmt_ii_ru
09 server mgmt_ii_ru
 
10 server security_ro
10 server security_ro10 server security_ro
10 server security_ro
 
10 server security_ru
10 server security_ru10 server security_ru
10 server security_ru
 
08 server mgmt_ro
08 server mgmt_ro08 server mgmt_ro
08 server mgmt_ro
 
08 server mgmt_ru
08 server mgmt_ru08 server mgmt_ru
08 server mgmt_ru
 
07 virtual hosts_ru
07 virtual hosts_ru07 virtual hosts_ru
07 virtual hosts_ru
 
07 virtual hosts_ro
07 virtual hosts_ro07 virtual hosts_ro
07 virtual hosts_ro
 
06 php instalation_ro
06 php instalation_ro06 php instalation_ro
06 php instalation_ro
 
06 php instalation_ru
06 php instalation_ru06 php instalation_ru
06 php instalation_ru
 
05 db server_deployment_ro
05 db server_deployment_ro05 db server_deployment_ro
05 db server_deployment_ro
 
05 db server_deployment_ru
05 db server_deployment_ru05 db server_deployment_ru
05 db server_deployment_ru
 
04 web server_deployment_ro
04 web server_deployment_ro04 web server_deployment_ro
04 web server_deployment_ro
 
04 web server_deployment_ru
04 web server_deployment_ru04 web server_deployment_ru
04 web server_deployment_ru
 
03 web server_architecture_ro
03 web server_architecture_ro03 web server_architecture_ro
03 web server_architecture_ro
 
03 web server_architecture_ru
03 web server_architecture_ru03 web server_architecture_ru
03 web server_architecture_ru
 
02 server hardware_ro
02 server hardware_ro02 server hardware_ro
02 server hardware_ro
 
02 server hardware_ru
02 server hardware_ru02 server hardware_ru
02 server hardware_ru
 
01 server definition_ro
01 server definition_ro01 server definition_ro
01 server definition_ro
 
01 server definition
01 server definition01 server definition
01 server definition
 

Último

CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
Хроники кибер-безопасника
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
Ирония безопасности
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
Хроники кибер-безопасника
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Ирония безопасности
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
Хроники кибер-безопасника
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
Хроники кибер-безопасника
 

Último (9)

MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 
Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 

библиотеки программирования

  • 2. Содержание  Что такое библиотека программирования  Виды библиотек программирования  Структура библиотек программирования  Особенности библиотек программирования  Рекомендации  Разработка библиотек программирования  Статические библиотеки  Динамические библиотеки  Использование библиотек программирования  Неявное связывание  Явное связывание
  • 3. Библиотеки Программирования Под библиотеками программирования понимают архивы ресурсов программирования, таких как функции, классы, объекты, константы и различные переменные. В частности, константами могут быть заданы графические или мультимедийные данные.
  • 4. Виды библиотек программирования  Статические библиотеки  При компиляции в программу вставляются куски объектного кода из библиотеки, представляющие функцию (класс или другой ресурс).  Динамические библиотеки  При компиляции в программу вставляются вызовы функций (ссылки на ресурсы) из динамической библиотеки.
  • 5. Структура библиотек программирования  Заголовочный файл  Статическая библиотека  Заголовочный файл  Библиотека импорта  Динамическая библиотека Статические библиотеки Динамические библиотеки *.h *.lib (*.a) *.h *.lib (*.a) *.dll (*.so)
  • 6. Особенности библиотек программирования  В программу включается код только используемых функций.  Программа не зависит от наличия библиотек в ОС.  Занимают относительно мало места в О.П.  Большой размер программ.  В случает обновления библиотеки требуется перекомпиляция программы.  Программа загружает в оперативную память всю используемую dll.  Несколько программ работает с одной dll одновременно.  Маленький размер программ  Требует наличие dll в ОС.  Возможно обновление версии dll без перекомпиляции программы. Статические библиотеки Динамические библиотеки
  • 7. Рекомендации  Если библиотека редкая или нестандартная, лучше использовать статическую компоновку программы.  Если библиотека широко распространена или стандартная, то рекомендуется использовать динамическую компоновку программы.  Желательно создавать обе версии библиотек: и динамическую, и статическую.
  • 9. Статические библиотеки: заголовочные файлы #ifndef _GEOMETRY_H_ #define _GEOMETRY_H_ struct point{ double x, y; point(); point(double, double); }; struct line{ double a, b, c; line(); line(double, double, double); }; #endif Заголовочные файлы должны быть защищены от повторного включения директивами препроцессора: #ifndef A_CONSTANT #define A_CONSTANT #endif Microsoft VC++ (+ Intel Compiler) позволяют использовать директиву #pragma once
  • 10. Статические библиотеки: исходники #include "geometry.h" point::point(): x(0), y(0) {} point::point(double p1, double p2) : x(p1), y(p2) {} line::line(): a(0), b(0), c(0) {} line::line(double p1, double p2, double p3) : a(p1), b(p2), c(p3) {} Исходные файлы пишутся как обычно, без всяких особенностей
  • 11. Динамические библиотеки: заголовочные файлы #ifndef _GEOMETRY_H_ #define _GEOMETRY_H_ #define DLLEXPORT __declspec(dllexport) struct DLLEXPORT point{ double x, y; point(); point(double, double); }; struct DLLEXPORT line{ double a, b, c; line(); line(double, double, double); bool contains(const point&) const; }; DLLEXPORT bool contains(const line&, const point&); #endif Добавляется указание (макрос) на экспорт структур и функций Cpp файлы остаются неизменными
  • 12. Динамические библиотеки: файлы определения модулей Используются для определения функций на экспорт вместо __declspec(dllexport) MODULE mylib EXPORTS min @1 isPrime @2 nope @3 ; no operation
  • 13. Динамические библиотеки: точка входа  Динамические библиотеки могут иметь точку входа (использует windows.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; }
  • 14. Использование библиотек программирования  Статическая линковка  Динамическое неявное связывание  Динамическое явное связывание Линковка статических библиотек и неявное связывание динамических библиотек совпадают по реализации.
  • 16. Подключение библиотеки пользователя Указать относительный / абсолютный путь до заголовочного файла. Указать в свойствах путь до библиотеки
  • 17. Подключение библиотеки при помощи комментария компилятору #include "../geometry/geometry.h" #pragma comment(lib, "../Debug/Geometry.lib") #include <iostream> int main(){ plane::point p(1, 0), p2(1, 2); //plane::line l(1, -1, 0); //std::cout << l.contains(p); std::cout << "distance from " << p << " and " << p2 << " is " << plane::distance(p, p2) << std::endl; return 0; }
  • 18. Явное связывание  Windows.h  HMODULE WINAPI LoadLibrary(LPCTSTR lpFileName);  BOOL WINAPI FreeLibrary(HMODULE hModule);  FARPROC WINAPI GetProcAddress(HMODULE hModule, LPCSTR lpProcName);
  • 19. Явное связывание #include <Windows.h> #include <iostream> int main(){ HMODULE hMdl = LoadLibrary(L"geometry"); if(hMdl != NULL){ std::cout << "Library 'geometry' is loaded" << std::endl; } else{ std::cout << "Library 'geometry' is not loaded" << std::endl; } return 0; }  Загрузка библиотеки в нужный момент при помощи функции LoadLibrary  Используется WinAPI ( заголовочный файл windows.h)
  • 20. Использование функции из dll Библиотеку dll, загружаемую при помощи LoadLibrary, можно использовать без библиотеки импорта. Пусть в mymath.dll определены функции: #pragma once typedef unsigned long long u64; u64 factorial(u64); bool isSimple(u64); #include <Windows.h> #include <iostream> typedef bool (*pfunc)(unsigned long long); int _tmain(int argc, _TCHAR* argv[]){ HMODULE hMdl = LoadLibrary(L"mymath"); if(hMdl != NULL){ std::cout << "library is loaded" << std::endl; pfunc IsPrime = (pfunc)GetProcAddress(hMdl, "isSimple"); if(IsPrime != NULL) std::cout << "number " << 997 << " is " <<(IsPrime(997) ? "prime" : "composed")<<std::endl; else std::cout << "function not found" << std::endl; } else{ std::cout << "error library loading" << std::endl; } return 0; }
  • 21. Ресурсы из dll  Windows.h  LPTSTR MAKEINTRESOURCE(WORD wInteger);  HRSRC WINAPI FindResource(HMODULE hModule, LPCTSTR lpName, LPCTSTR pType);  HGLOBAL WINAPI LoadResource(HMODULE hModule, HRSRC hResInfo);  HBITMAP LoadBitmap(HINSTANCE hInstance, LPCTSTR lpBitmapName);  int WINAPI LoadString(HINSTANCE hInstance, UINT uID, LPTSTR lpBuffer, int nBufferMax);
  • 23. Использование ресурса из dll #include <Windows.h> #include <iostream> int _tmain(int argc, _TCHAR* argv[]) { HMODULE hMdl = LoadLibrary(L"mymath"); if(hMdl != NULL){ LPTSTR str = new wchar_t[1024]; LoadString(hMdl, 101, str, 1024); MessageBox(NULL, str, 0, 0); } else{ std::cout << "error library loading" << std::endl; } return 0; } Поиск ресурса осуществляется по идентификатору