SlideShare una empresa de Scribd logo
1 de 23
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

Más contenido relacionado

Destacado

стандартная библиотека с++: введение
стандартная библиотека с++: введениестандартная библиотека с++: введение
стандартная библиотека с++: введениеmcroitor
 
библиотеки программирования
библиотеки программированиябиблиотеки программирования
библиотеки программированияmcroitor
 
AgoraDMS - Registratura electronica si Managementul documentelor
AgoraDMS - Registratura electronica si Managementul documentelorAgoraDMS - Registratura electronica si Managementul documentelor
AgoraDMS - Registratura electronica si Managementul documentelorSoft 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 introduceremcroitor
 
особенности программирования на с++
особенности программирования на с++особенности программирования на с++
особенности программирования на с++mcroitor
 

Destacado (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 a 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 aplicatiiSabin Buraga
 
Prezentare USO - Web Application Integration
Prezentare USO - Web Application IntegrationPrezentare USO - Web Application Integration
Prezentare USO - Web Application Integrationmihneasim
 
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
 
Procesare Rdf Sub .Net Framework
Procesare Rdf Sub .Net FrameworkProcesare Rdf Sub .Net Framework
Procesare Rdf Sub .Net Frameworkdodoshelu
 
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 a 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...
 

Más de mcroitor

09 server mgmt_ii_ro
09 server mgmt_ii_ro09 server mgmt_ii_ro
09 server mgmt_ii_romcroitor
 
09 server mgmt_ii_ru
09 server mgmt_ii_ru09 server mgmt_ii_ru
09 server mgmt_ii_rumcroitor
 
10 server security_ro
10 server security_ro10 server security_ro
10 server security_romcroitor
 
10 server security_ru
10 server security_ru10 server security_ru
10 server security_rumcroitor
 
08 server mgmt_ro
08 server mgmt_ro08 server mgmt_ro
08 server mgmt_romcroitor
 
08 server mgmt_ru
08 server mgmt_ru08 server mgmt_ru
08 server mgmt_rumcroitor
 
07 virtual hosts_ru
07 virtual hosts_ru07 virtual hosts_ru
07 virtual hosts_rumcroitor
 
07 virtual hosts_ro
07 virtual hosts_ro07 virtual hosts_ro
07 virtual hosts_romcroitor
 
06 php instalation_ro
06 php instalation_ro06 php instalation_ro
06 php instalation_romcroitor
 
06 php instalation_ru
06 php instalation_ru06 php instalation_ru
06 php instalation_rumcroitor
 
05 db server_deployment_ro
05 db server_deployment_ro05 db server_deployment_ro
05 db server_deployment_romcroitor
 
05 db server_deployment_ru
05 db server_deployment_ru05 db server_deployment_ru
05 db server_deployment_rumcroitor
 
04 web server_deployment_ro
04 web server_deployment_ro04 web server_deployment_ro
04 web server_deployment_romcroitor
 
04 web server_deployment_ru
04 web server_deployment_ru04 web server_deployment_ru
04 web server_deployment_rumcroitor
 
03 web server_architecture_ro
03 web server_architecture_ro03 web server_architecture_ro
03 web server_architecture_romcroitor
 
03 web server_architecture_ru
03 web server_architecture_ru03 web server_architecture_ru
03 web server_architecture_rumcroitor
 
02 server hardware_ro
02 server hardware_ro02 server hardware_ro
02 server hardware_romcroitor
 
02 server hardware_ru
02 server hardware_ru02 server hardware_ru
02 server hardware_rumcroitor
 
01 server definition_ro
01 server definition_ro01 server definition_ro
01 server definition_romcroitor
 
01 server definition
01 server definition01 server definition
01 server definitionmcroitor
 

Más 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
 

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