SlideShare a Scribd company logo
BIBLIOTECI DE
PROGRAMARE
Mihail Croitor
Cuprins
 Ce se numește biblioteca de programare
 Tipuri bibliotecilor de programare
 Structura bibliotecilor de programare
 Particularitățile bibliotecilor de programare
 Recomandări
 Elaborarea bibliotecilor de programare
 Biblioteci statice
 Biblioteci dinamice
 Utilizarea bibliotecilor de programare
 Legarea in mod implicit
 Legarea in mod explicit
Biblioteci de programare
Biblioteci de programare sunt arhive ale resurselor
de programare, cum ar fi: funcții, clase, obiecte,
constante și diferite variabile.
Ca constante în biblioteci pot fi definite și datele grafice sau multimedia.
Tipuri bibliotecilor
de programare
 Biblioteci statice
 La etapa de compilare în aplicația se adaugă fragmente
de cod-obiect din biblioteca, care reprezint funcții
(clase sau alte resurse) utilizate.
 Biblioteci dinamice
 La etapa de compilare în aplicația se includ numai
apelurile funcțiilor (sau referințe la resurse) din
biblioteca dinamică.
Structura bibliotecilor de programare
 Fișier antet
 Biblioteca
statică
 Fișier antet
 Biblioteca
de import
 Biblioteca
dinamică
Biblioteci statice Biblioteci dinamice
*.h
*.lib
(*.a)
*.h
*.lib
(*.a)
*.dll
(*.so)
Particularitățile
bibliotecilor de programare
 În program rezultant se adaugă
numai codul funcțiilor utilizate.
 Programul nu depinde de
existența bibliotecilor în SO.
 Ocupă mai puțină memorie
operativă (relativ).
 Volumul programului este mai
mare (relativ).
 Dacă biblioteca a fost schimbată,
se cere recompilarea
programului.
 Independent de numarul
funcțiilor utilizate, programul
încarcă in memoria operativă
DLL în întregime.
 Mai multe programe pot lucra
concomitent cu o bibliotecă dll.
 Volumul programului este mai
mic (relativ)
 Este necesară existența
bibliotecii dll în SO.
 După reînniorea bibliotecii dll
recompilarea programului nu
este necesară.
Biblioteci statice Biblioteci dinamice
Recomandări
 Dacă o bibliotecă nu este standardă sau este rară,
mai bine de utilizat legarea statică.
 Dacă biblioteca este standardă sau una larg
utilizată, atunci se recomandă utilizarea legării
dinamice.
 Se recomandă crearea ambelor versiuni ale
bibliotecii: versiunea dinamică și statică.
Elaborarea bibliotecilor de programare
Proces de
eleborare
bibliotecilor
seamănă cu
elaborarea
aplicațiilor
obișnuite
Biblioteci statice: fișiere-antet
#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
Fisiere-antet trebuie protejate de
includerea repetată cu ajutorul
directivelor preprocesorului:
#ifndef A_CONSTANT
#define A_CONSTANT
#endif
Microsoft VC++ (+ Intel Compiler)
permite utilizarea directivei
#pragma once
Biblioteci statice: codul-sursă
#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) {}
Codul sursă se scrie în mod obișnuit
Biblioteci dinamice: fișier-antet
#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
Se adaugă o indicație
(un macrou) pentru exportul
structurilor și funcțiilor
Cpp fișiere nu se modifică
Biblioteci dinamice:
fișiere de definiție a modulelor
Fișiere cu extensia .DEF se
utilizează pentru definirea
funcțiilor exportate de
biblioteca (este o
alternativă pentru
__declspec(dllexport) )
MODULE mylib
EXPORTS
min @1
isPrime @2
nope @3 ; no operation
Biblioteci dinamice:
punctul de întrare
 În biblioteca dinamică poate fi definit punct
de întrare (se utilizează 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;
}
Utilizarea bibliotecilor de
programare
 Legarea statică
 Legarea dinamică implicită
 Legarea dinamică explicită
Modul de realizare a legării statice
coincide cu modul de realizare a legării
dinamice implicite.
Legare statică
geometry.h
geometry.lib
Copiați fișierul antet în mapa include,
biblioteca în lib
Utilizare bibliotecii în proiect
1. Indicați calea
relativă/absolută pâna la
fișierul antet.
2. Indicați în proprietățile
proiectului calea până la
biblioteca
Legarea bibliotecii cu ajutorul unui
macrou
#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;
}
Legare explicită
 Windows.h
 HMODULE WINAPI LoadLibrary(LPCTSTR
lpFileName);
 BOOL WINAPI FreeLibrary(HMODULE hModule);
 FARPROC WINAPI GetProcAddress(HMODULE
hModule, LPCSTR lpProcName);
Legarea explicită
#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;
}
 Biblioteca poate fi legată cu aplicație
în momentul necesar cu ajutorul
funcției LoadLibrary
 Se utilizează WinAPI ( fișierul antet
windows.h)
Utilizarea funcțiilor din dll
Dacă biblioteca dinamică dll este
încărcată în memoria operativă cu
ajutorul funcției LoadLibrary,
atuncii ea poate fi utilizată fără
biblioteca de import.
Dacă în mymath.dll sunt defenite
funcții:
#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;
}
Resurse din dll: funcții
 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);
Resurse în dll
Utilizarea resurselor din 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;
}
Căutarea resursei se face după ID

More Related Content

Viewers also liked

стандартная библиотека с++: введение
стандартная библиотека с++: введениестандартная библиотека с++: введение
стандартная библиотека с++: введение
mcroitor
 
библиотеки программирования
библиотеки программированиябиблиотеки программирования
библиотеки программированияmcroitor
 
AgoraDMS - Registratura electronica si Managementul documentelor
AgoraDMS - Registratura electronica si Managementul documentelorAgoraDMS - Registratura electronica si Managementul documentelor
AgoraDMS - Registratura electronica si Managementul documentelor
Soft Tehnica
 
Curs 3 Data Mining
Curs 3 Data MiningCurs 3 Data Mining
Curs 3 Data MiningLucian Sasu
 
Curs 1 Data Mining
Curs 1 Data MiningCurs 1 Data Mining
Curs 1 Data MiningLucian Sasu
 
mfc introducere
mfc introduceremfc introducere
mfc introducere
mcroitor
 
особенности программирования на с++
особенности программирования на с++особенности программирования на с++
особенности программирования на с++
mcroitor
 

Viewers also liked (7)

стандартная библиотека с++: введение
стандартная библиотека с++: введениестандартная библиотека с++: введение
стандартная библиотека с++: введение
 
библиотеки программирования
библиотеки программированиябиблиотеки программирования
библиотеки программирования
 
AgoraDMS - Registratura electronica si Managementul documentelor
AgoraDMS - Registratura electronica si Managementul documentelorAgoraDMS - Registratura electronica si Managementul documentelor
AgoraDMS - Registratura electronica si Managementul documentelor
 
Curs 3 Data Mining
Curs 3 Data MiningCurs 3 Data Mining
Curs 3 Data Mining
 
Curs 1 Data Mining
Curs 1 Data MiningCurs 1 Data Mining
Curs 1 Data Mining
 
mfc introducere
mfc introduceremfc introducere
mfc introducere
 
особенности программирования на с++
особенности программирования на с++особенности программирования на с++
особенности программирования на с++
 

Similar to 3. biblioteci de programare

Cu codul în "nori"
Cu codul în "nori"Cu codul în "nori"
Cu codul în "nori"
Sabin Buraga
 
baze c++sructura unui program declarare variabilepdf.
baze c++sructura unui program declarare variabilepdf.baze c++sructura unui program declarare variabilepdf.
baze c++sructura unui program declarare variabilepdf.
AdrianaDanielaCupsa
 
Programare Web - De la CGI la servere de aplicatii
Programare Web - De la CGI la servere de aplicatiiProgramare Web - De la CGI la servere de aplicatii
Programare Web - De la CGI la servere de aplicatii
Sabin Buraga
 
Prezentare USO - Web Application Integration
Prezentare USO - Web Application IntegrationPrezentare USO - Web Application Integration
Prezentare USO - Web Application Integration
mihneasim
 
Curs Visual c++
Curs Visual c++Curs Visual c++
Curs Visual c++
Apolo Apolo
 
Curs C++
Curs C++Curs C++
Curs C++
Apolo Apolo
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #10): Ingineria dezvo...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #10): Ingineria dezvo...Dezvoltarea aplicaţiilor Web la nivel de client (cursul #10): Ingineria dezvo...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #10): Ingineria dezvo...
Sabin Buraga
 
HTML5? HTML5!
HTML5? HTML5!HTML5? HTML5!
HTML5? HTML5!
Sabin Buraga
 
Procesare Rdf Sub .Net Framework
Procesare Rdf Sub .Net FrameworkProcesare Rdf Sub .Net Framework
Procesare Rdf Sub .Net Framework
dodoshelu
 
Democamp Bucharest 2010 P2 Ro
Democamp Bucharest 2010   P2 RoDemocamp Bucharest 2010   P2 Ro
Democamp Bucharest 2010 P2 RoAntonel Pazargic
 
Programare Web - PHP (o prezentare generala)
Programare Web - PHP (o prezentare generala)Programare Web - PHP (o prezentare generala)
Programare Web - PHP (o prezentare generala)
Sabin Buraga
 
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
Sabin Buraga
 

Similar to 3. biblioteci de programare (14)

Cu codul în "nori"
Cu codul în "nori"Cu codul în "nori"
Cu codul în "nori"
 
baze c++sructura unui program declarare variabilepdf.
baze c++sructura unui program declarare variabilepdf.baze c++sructura unui program declarare variabilepdf.
baze c++sructura unui program declarare variabilepdf.
 
Cap08
Cap08Cap08
Cap08
 
Programare Web - De la CGI la servere de aplicatii
Programare Web - De la CGI la servere de aplicatiiProgramare Web - De la CGI la servere de aplicatii
Programare Web - De la CGI la servere de aplicatii
 
Cap02
Cap02Cap02
Cap02
 
Prezentare USO - Web Application Integration
Prezentare USO - Web Application IntegrationPrezentare USO - Web Application Integration
Prezentare USO - Web Application Integration
 
Curs Visual c++
Curs Visual c++Curs Visual c++
Curs Visual c++
 
Curs C++
Curs C++Curs C++
Curs C++
 
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #10): Ingineria dezvo...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #10): Ingineria dezvo...Dezvoltarea aplicaţiilor Web la nivel de client (cursul #10): Ingineria dezvo...
Dezvoltarea aplicaţiilor Web la nivel de client (cursul #10): Ingineria dezvo...
 
HTML5? HTML5!
HTML5? HTML5!HTML5? HTML5!
HTML5? HTML5!
 
Procesare Rdf Sub .Net Framework
Procesare Rdf Sub .Net FrameworkProcesare Rdf Sub .Net Framework
Procesare Rdf Sub .Net Framework
 
Democamp Bucharest 2010 P2 Ro
Democamp Bucharest 2010   P2 RoDemocamp Bucharest 2010   P2 Ro
Democamp Bucharest 2010 P2 Ro
 
Programare Web - PHP (o prezentare generala)
Programare Web - PHP (o prezentare generala)Programare Web - PHP (o prezentare generala)
Programare Web - PHP (o prezentare generala)
 
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
 

More from mcroitor

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

More from 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
 

Recently uploaded

Elemente geometrice din portul popular,,
Elemente geometrice din portul popular,,Elemente geometrice din portul popular,,
Elemente geometrice din portul popular,,
OlgaFalca
 
Marea Egee prezentare descriere fauna geografie
Marea Egee prezentare descriere fauna geografieMarea Egee prezentare descriere fauna geografie
Marea Egee prezentare descriere fauna geografie
charlie2016andreiste
 
Raport proiect transfrontalier „Educație online fără hotare”
Raport proiect transfrontalier „Educație online fără hotare”Raport proiect transfrontalier „Educație online fără hotare”
Raport proiect transfrontalier „Educație online fără hotare”
SemenNicoleta
 
Sistemul-limbic.pptMMMLLLȘDȘETJȘEțjȚețjȚEUJȚLEȚ.J/E:șdTHȘȚTEȘȚJLȘ.NYEȘF.
Sistemul-limbic.pptMMMLLLȘDȘETJȘEțjȚețjȚEUJȚLEȚ.J/E:șdTHȘȚTEȘȚJLȘ.NYEȘF.Sistemul-limbic.pptMMMLLLȘDȘETJȘEțjȚețjȚEUJȚLEȚ.J/E:șdTHȘȚTEȘȚJLȘ.NYEȘF.
Sistemul-limbic.pptMMMLLLȘDȘETJȘEțjȚețjȚEUJȚLEȚ.J/E:șdTHȘȚTEȘȚJLȘ.NYEȘF.
mihalasolga1
 
Raport proiect transnațional România-Moldova
Raport proiect transnațional România-MoldovaRaport proiect transnațional România-Moldova
Raport proiect transnațional România-Moldova
nadiusha12345
 
proiect Transfrontalier Mai.pptx simbiolurile primaverii
proiect Transfrontalier Mai.pptx simbiolurile primaveriiproiect Transfrontalier Mai.pptx simbiolurile primaverii
proiect Transfrontalier Mai.pptx simbiolurile primaverii
auraortacu
 
Energia e viata! O explorare interdisciplinară prin prisma activităților de t...
Energia e viata! O explorare interdisciplinară prin prisma activităților de t...Energia e viata! O explorare interdisciplinară prin prisma activităților de t...
Energia e viata! O explorare interdisciplinară prin prisma activităților de t...
CarmenAmoraritei
 
Proiect transfrontalier Grecu Larisa .pptx
Proiect transfrontalier Grecu Larisa  .pptxProiect transfrontalier Grecu Larisa  .pptx
Proiect transfrontalier Grecu Larisa .pptx
AlexandrinaCn
 
Românismul de la Mihai Eminescu la Grigore Vieru
Românismul de la Mihai Eminescu la Grigore VieruRomânismul de la Mihai Eminescu la Grigore Vieru
Românismul de la Mihai Eminescu la Grigore Vieru
inachirilov
 
Raport narativ-Pâine, Carte, Dumnezeu -Trohin Nadejda
Raport narativ-Pâine, Carte, Dumnezeu -Trohin NadejdaRaport narativ-Pâine, Carte, Dumnezeu -Trohin Nadejda
Raport narativ-Pâine, Carte, Dumnezeu -Trohin Nadejda
NadejdaTrohin1
 
Proiect transnațional"Ursuleții călători":"Tradiții și obiceiuri de o parte ...
Proiect  transnațional"Ursuleții călători":"Tradiții și obiceiuri de o parte ...Proiect  transnațional"Ursuleții călători":"Tradiții și obiceiuri de o parte ...
Proiect transnațional"Ursuleții călători":"Tradiții și obiceiuri de o parte ...
PaisCarmen
 
Raport parteneriat transfrontalier "Emoții de Prichindel".pptx
Raport parteneriat transfrontalier "Emoții de Prichindel".pptxRaport parteneriat transfrontalier "Emoții de Prichindel".pptx
Raport parteneriat transfrontalier "Emoții de Prichindel".pptx
OlgaCasareci
 
Raport " Talentele copiilor de pretutindeni "
Raport " Talentele copiilor de pretutindeni "Raport " Talentele copiilor de pretutindeni "
Raport " Talentele copiilor de pretutindeni "
AndreeaChelaru7
 
Raport Proiectul transnațional 2023-2024.pptx
Raport Proiectul transnațional 2023-2024.pptxRaport Proiectul transnațional 2023-2024.pptx
Raport Proiectul transnațional 2023-2024.pptx
nadiusha12345
 

Recently uploaded (14)

Elemente geometrice din portul popular,,
Elemente geometrice din portul popular,,Elemente geometrice din portul popular,,
Elemente geometrice din portul popular,,
 
Marea Egee prezentare descriere fauna geografie
Marea Egee prezentare descriere fauna geografieMarea Egee prezentare descriere fauna geografie
Marea Egee prezentare descriere fauna geografie
 
Raport proiect transfrontalier „Educație online fără hotare”
Raport proiect transfrontalier „Educație online fără hotare”Raport proiect transfrontalier „Educație online fără hotare”
Raport proiect transfrontalier „Educație online fără hotare”
 
Sistemul-limbic.pptMMMLLLȘDȘETJȘEțjȚețjȚEUJȚLEȚ.J/E:șdTHȘȚTEȘȚJLȘ.NYEȘF.
Sistemul-limbic.pptMMMLLLȘDȘETJȘEțjȚețjȚEUJȚLEȚ.J/E:șdTHȘȚTEȘȚJLȘ.NYEȘF.Sistemul-limbic.pptMMMLLLȘDȘETJȘEțjȚețjȚEUJȚLEȚ.J/E:șdTHȘȚTEȘȚJLȘ.NYEȘF.
Sistemul-limbic.pptMMMLLLȘDȘETJȘEțjȚețjȚEUJȚLEȚ.J/E:șdTHȘȚTEȘȚJLȘ.NYEȘF.
 
Raport proiect transnațional România-Moldova
Raport proiect transnațional România-MoldovaRaport proiect transnațional România-Moldova
Raport proiect transnațional România-Moldova
 
proiect Transfrontalier Mai.pptx simbiolurile primaverii
proiect Transfrontalier Mai.pptx simbiolurile primaveriiproiect Transfrontalier Mai.pptx simbiolurile primaverii
proiect Transfrontalier Mai.pptx simbiolurile primaverii
 
Energia e viata! O explorare interdisciplinară prin prisma activităților de t...
Energia e viata! O explorare interdisciplinară prin prisma activităților de t...Energia e viata! O explorare interdisciplinară prin prisma activităților de t...
Energia e viata! O explorare interdisciplinară prin prisma activităților de t...
 
Proiect transfrontalier Grecu Larisa .pptx
Proiect transfrontalier Grecu Larisa  .pptxProiect transfrontalier Grecu Larisa  .pptx
Proiect transfrontalier Grecu Larisa .pptx
 
Românismul de la Mihai Eminescu la Grigore Vieru
Românismul de la Mihai Eminescu la Grigore VieruRomânismul de la Mihai Eminescu la Grigore Vieru
Românismul de la Mihai Eminescu la Grigore Vieru
 
Raport narativ-Pâine, Carte, Dumnezeu -Trohin Nadejda
Raport narativ-Pâine, Carte, Dumnezeu -Trohin NadejdaRaport narativ-Pâine, Carte, Dumnezeu -Trohin Nadejda
Raport narativ-Pâine, Carte, Dumnezeu -Trohin Nadejda
 
Proiect transnațional"Ursuleții călători":"Tradiții și obiceiuri de o parte ...
Proiect  transnațional"Ursuleții călători":"Tradiții și obiceiuri de o parte ...Proiect  transnațional"Ursuleții călători":"Tradiții și obiceiuri de o parte ...
Proiect transnațional"Ursuleții călători":"Tradiții și obiceiuri de o parte ...
 
Raport parteneriat transfrontalier "Emoții de Prichindel".pptx
Raport parteneriat transfrontalier "Emoții de Prichindel".pptxRaport parteneriat transfrontalier "Emoții de Prichindel".pptx
Raport parteneriat transfrontalier "Emoții de Prichindel".pptx
 
Raport " Talentele copiilor de pretutindeni "
Raport " Talentele copiilor de pretutindeni "Raport " Talentele copiilor de pretutindeni "
Raport " Talentele copiilor de pretutindeni "
 
Raport Proiectul transnațional 2023-2024.pptx
Raport Proiectul transnațional 2023-2024.pptxRaport Proiectul transnațional 2023-2024.pptx
Raport Proiectul transnațional 2023-2024.pptx
 

3. biblioteci de programare

  • 2. Cuprins  Ce se numește biblioteca de programare  Tipuri bibliotecilor de programare  Structura bibliotecilor de programare  Particularitățile bibliotecilor de programare  Recomandări  Elaborarea bibliotecilor de programare  Biblioteci statice  Biblioteci dinamice  Utilizarea bibliotecilor de programare  Legarea in mod implicit  Legarea in mod explicit
  • 3. Biblioteci de programare Biblioteci de programare sunt arhive ale resurselor de programare, cum ar fi: funcții, clase, obiecte, constante și diferite variabile. Ca constante în biblioteci pot fi definite și datele grafice sau multimedia.
  • 4. Tipuri bibliotecilor de programare  Biblioteci statice  La etapa de compilare în aplicația se adaugă fragmente de cod-obiect din biblioteca, care reprezint funcții (clase sau alte resurse) utilizate.  Biblioteci dinamice  La etapa de compilare în aplicația se includ numai apelurile funcțiilor (sau referințe la resurse) din biblioteca dinamică.
  • 5. Structura bibliotecilor de programare  Fișier antet  Biblioteca statică  Fișier antet  Biblioteca de import  Biblioteca dinamică Biblioteci statice Biblioteci dinamice *.h *.lib (*.a) *.h *.lib (*.a) *.dll (*.so)
  • 6. Particularitățile bibliotecilor de programare  În program rezultant se adaugă numai codul funcțiilor utilizate.  Programul nu depinde de existența bibliotecilor în SO.  Ocupă mai puțină memorie operativă (relativ).  Volumul programului este mai mare (relativ).  Dacă biblioteca a fost schimbată, se cere recompilarea programului.  Independent de numarul funcțiilor utilizate, programul încarcă in memoria operativă DLL în întregime.  Mai multe programe pot lucra concomitent cu o bibliotecă dll.  Volumul programului este mai mic (relativ)  Este necesară existența bibliotecii dll în SO.  După reînniorea bibliotecii dll recompilarea programului nu este necesară. Biblioteci statice Biblioteci dinamice
  • 7. Recomandări  Dacă o bibliotecă nu este standardă sau este rară, mai bine de utilizat legarea statică.  Dacă biblioteca este standardă sau una larg utilizată, atunci se recomandă utilizarea legării dinamice.  Se recomandă crearea ambelor versiuni ale bibliotecii: versiunea dinamică și statică.
  • 8. Elaborarea bibliotecilor de programare Proces de eleborare bibliotecilor seamănă cu elaborarea aplicațiilor obișnuite
  • 9. Biblioteci statice: fișiere-antet #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 Fisiere-antet trebuie protejate de includerea repetată cu ajutorul directivelor preprocesorului: #ifndef A_CONSTANT #define A_CONSTANT #endif Microsoft VC++ (+ Intel Compiler) permite utilizarea directivei #pragma once
  • 10. Biblioteci statice: codul-sursă #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) {} Codul sursă se scrie în mod obișnuit
  • 11. Biblioteci dinamice: fișier-antet #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 Se adaugă o indicație (un macrou) pentru exportul structurilor și funcțiilor Cpp fișiere nu se modifică
  • 12. Biblioteci dinamice: fișiere de definiție a modulelor Fișiere cu extensia .DEF se utilizează pentru definirea funcțiilor exportate de biblioteca (este o alternativă pentru __declspec(dllexport) ) MODULE mylib EXPORTS min @1 isPrime @2 nope @3 ; no operation
  • 13. Biblioteci dinamice: punctul de întrare  În biblioteca dinamică poate fi definit punct de întrare (se utilizează 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. Utilizarea bibliotecilor de programare  Legarea statică  Legarea dinamică implicită  Legarea dinamică explicită Modul de realizare a legării statice coincide cu modul de realizare a legării dinamice implicite.
  • 15. Legare statică geometry.h geometry.lib Copiați fișierul antet în mapa include, biblioteca în lib
  • 16. Utilizare bibliotecii în proiect 1. Indicați calea relativă/absolută pâna la fișierul antet. 2. Indicați în proprietățile proiectului calea până la biblioteca
  • 17. Legarea bibliotecii cu ajutorul unui macrou #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. Legare explicită  Windows.h  HMODULE WINAPI LoadLibrary(LPCTSTR lpFileName);  BOOL WINAPI FreeLibrary(HMODULE hModule);  FARPROC WINAPI GetProcAddress(HMODULE hModule, LPCSTR lpProcName);
  • 19. Legarea explicită #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; }  Biblioteca poate fi legată cu aplicație în momentul necesar cu ajutorul funcției LoadLibrary  Se utilizează WinAPI ( fișierul antet windows.h)
  • 20. Utilizarea funcțiilor din dll Dacă biblioteca dinamică dll este încărcată în memoria operativă cu ajutorul funcției LoadLibrary, atuncii ea poate fi utilizată fără biblioteca de import. Dacă în mymath.dll sunt defenite funcții: #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. Resurse din dll: funcții  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. Utilizarea resurselor din 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; } Căutarea resursei se face după ID