3. biblioteci de programare
Upcoming SlideShare
Loading in...5
×
 

3. biblioteci de programare

on

  • 1,480 views

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. ...

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

Statistics

Views

Total Views
1,480
Views on SlideShare
153
Embed Views
1,327

Actions

Likes
0
Downloads
4
Comments
0

4 Embeds 1,327

http://moodle.usm.md 1247
http://www.moodle.usm.md 66
http://www.slideee.com 13
http://elearning.usm.md 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

3. biblioteci de programare 3. biblioteci de programare Presentation Transcript

  • 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