0
BIBLIOTECI DE
PROGRAMARE
Mihail Croitor
Cuprins
 Ce se numește biblioteca de programare
 Tipuri bibliotecilor de programare
 Structura bibliotecilor de program...
Biblioteci de programare
Biblioteci de programare sunt arhive ale resurselor
de programare, cum ar fi: funcții, clase, obi...
Tipuri bibliotecilor
de programare
 Biblioteci statice
 La etapa de compilare în aplicația se adaugă fragmente
de cod-ob...
Structura bibliotecilor de programare
 Fișier antet
 Biblioteca
statică
 Fișier antet
 Biblioteca
de import
 Bibliote...
Particularitățile
bibliotecilor de programare
 În program rezultant se adaugă
numai codul funcțiilor utilizate.
 Program...
Recomandări
 Dacă o bibliotecă nu este standardă sau este rară,
mai bine de utilizat legarea statică.
 Dacă biblioteca e...
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(doub...
Biblioteci statice: codul-sursă
#include "geometry.h"
point::point(): x(0), y(0) {}
point::point(double p1, double p2)
: x...
Biblioteci dinamice: fișier-antet
#ifndef _GEOMETRY_H_
#define _GEOMETRY_H_
#define DLLEXPORT __declspec(dllexport)
struct...
Biblioteci dinamice:
fișiere de definiție a modulelor
Fișiere cu extensia .DEF se
utilizează pentru definirea
funcțiilor e...
Biblioteci dinamice:
punctul de întrare
 În biblioteca dinamică poate fi definit punct
de întrare (se utilizează windows....
Utilizarea bibliotecilor de
programare
 Legarea statică
 Legarea dinamică implicită
 Legarea dinamică explicită
Modul d...
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
...
Legarea bibliotecii cu ajutorul unui
macrou
#include "../geometry/geometry.h"
#pragma comment(lib, "../Debug/Geometry.lib"...
Legare explicită
 Windows.h
 HMODULE WINAPI LoadLibrary(LPCTSTR
lpFileName);
 BOOL WINAPI FreeLibrary(HMODULE hModule);...
Legarea explicită
#include <Windows.h>
#include <iostream>
int main(){
HMODULE hMdl = LoadLibrary(L"geometry");
if(hMdl !=...
Utilizarea funcțiilor din dll
Dacă biblioteca dinamică dll este
încărcată în memoria operativă cu
ajutorul funcției LoadLi...
Resurse din dll: funcții
 Windows.h
 LPTSTR MAKEINTRESOURCE(WORD wInteger);
 HRSRC WINAPI FindResource(HMODULE
hModule,...
Resurse în dll
Utilizarea resurselor din dll
#include <Windows.h>
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
HMODULE hMdl...
Upcoming SlideShare
Loading in...5
×

3. biblioteci de programare

5,109

Published on

Elaborarea aplicatiilor complexe poate fi smiplificata daca problema de elaborare se imparta in probleme mai mici. Atunci fiecare solutie va fi reprezentata printr-un modul - biblioteca de programare. In cadrul prezentarii se face descrierea bibliotecilor de programare, modul de elaborare si de utilizare a lor

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
5,109
On Slideshare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
16
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "3. biblioteci de programare"

  1. 1. BIBLIOTECI DE PROGRAMARE Mihail Croitor
  2. 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. 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. 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. 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. 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. 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. 8. Elaborarea bibliotecilor de programare Proces de eleborare bibliotecilor seamănă cu elaborarea aplicațiilor obișnuite
  9. 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. 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. 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. 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. 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. 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. 15. Legare statică geometry.h geometry.lib Copiați fișierul antet în mapa include, biblioteca în lib
  16. 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. 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. 18. Legare explicită  Windows.h  HMODULE WINAPI LoadLibrary(LPCTSTR lpFileName);  BOOL WINAPI FreeLibrary(HMODULE hModule);  FARPROC WINAPI GetProcAddress(HMODULE hModule, LPCSTR lpProcName);
  19. 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. 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. 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);
  22. 22. Resurse în dll
  23. 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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×