Caricamento libreria di link dinamico statico vs dinamico

Una DLL (Dynamic Link Library) funge da libreria condivisa di funzioni che possono essere richiamate da numerose applicazioni e altre DLL. Delphi ti consente di creare e utilizzare DLL in modo da poter chiamare queste funzioni a piacimento. Tuttavia, è necessario importare queste routine prima di poterle chiamare.

Le funzioni esportate da una DLL possono essere importate in due modi: dichiarando una procedura o funzione esterna (statica) o chiamando direttamente le funzioni API specifiche della DLL (dinamica).

Consideriamo una semplice DLL. Di seguito è riportato il codice per "circle.dll" che esporta una funzione, denominata "CircleArea", che calcola l'area di un cerchio utilizzando il raggio specificato:

Una volta che hai il circle.dll, puoi usare la funzione "CircleArea" esportata dalla tua applicazione.

Caricamento statico

Il modo più semplice per importare una procedura o una funzione è dichiararla utilizzando la direttiva esterna:

Se includi questa dichiarazione nella parte dell'interfaccia di un'unità, circle.dll viene caricato una volta all'avvio del programma. Durante l'esecuzione del programma, la funzione CircleArea è disponibile per tutte le unità che utilizzano l'unità in cui si trova la dichiarazione di cui sopra.

Caricamento dinamico

È possibile accedere alle routine in una libreria tramite chiamate dirette alle API Win32, incluso LoadLibrary, FreeLibrary, e GetProcAddress. Queste funzioni sono dichiarate in Windows.pas.

Ecco come chiamare la funzione CircleArea usando il caricamento dinamico:

Durante l'importazione mediante caricamento dinamico, la DLL non viene caricata fino alla chiamata a LoadLibrary. La libreria viene scaricata dalla chiamata a FreeLibrary.

Con il caricamento statico, la DLL viene caricata e le sue sezioni di inizializzazione vengono eseguite prima dell'esecuzione delle sezioni di inizializzazione dell'applicazione chiamante. Questo è invertito con caricamento dinamico.

Dovresti usare statico o dinamico?

Ecco un semplice sguardo ai vantaggi e agli svantaggi del caricamento DLL statico e dinamico:

Caricamento statico

Professionisti:

  • Più facile per uno sviluppatore principiante; nessuna chiamata API "brutta".
  • Le DLL vengono caricate una sola volta, all'avvio del programma.

Contro: