Una libreria di collegamento dinamico o DLL , consente a un'applicazione di caricare solo il codice eseguibile minimo necessario in memoria in fase di esecuzione . Ogni volta che il programma chiama una funzione in una DLL , il sistema operativo carica la DLL in memoria secondo le specifiche del programmatore . Fino a quando il programma in esecuzione non fa riferimento a una funzione di DLL , DLL , che non ha bisogno di occupare spazio . Questo permette di risparmiare un sacco di risorse e aumenta le prestazioni in fase di esecuzione . Se la libreria fosse statico , tutto il codice della libreria saranno allegati al codice eseguibile del programma principale e il programma di gigante avrebbe dovuto rimanere nella memoria per tutta la fase di esecuzione. La versione Unix o Linux di una DLL di Windows è una libreria condivisa , costruita di conseguenza con l'estensione ". Così . " Windows , Unix e Linux hanno convenzioni specifiche per accedere alle funzioni di DLL o librerie condivise . Esportazione Oggetti Windows DLL utilizzando dllexport chiave
Per fare una funzione , classe , elemento di dati o di una funzione membro della classe accessibile al programma di Windows chiamata , è necessario esportarlo prima . Una classe o una funzione possono essere esportati durante la sua definizione utilizzando il " __declspec ( dllexport ) " parola chiave prima del nome della funzione, una classe o una variabile , come segue :
Void __ declspec ( dllexport ) MyClass : CObjectName pubblica { ..... }
Nel file di intestazione DLL , ha messo questa parola chiave prima del nome della funzione in una dichiarazione di prototipo . Il " __declspec ( dllexport ) " parola chiave memorizza i nomi delle funzioni in tabella di esportazione della DLL. Per economizzare lo spazio che questa tabella occupa , usano i numeri ordinali invece di nomi di funzione .
Esportazione di Windows DLL oggetti tramite modulo di file di definizione
Come alternativa alla parola " __declspec ( dllexport ) , "creare un file di definizione del modulo in cui si afferma il nome della libreria , descrizione facoltativa ed elenca i nomi di funzioni, classi e variabili di dati nella DLL con valori ordinali opzionali . Il valore ordinale di una funzione varia da 1 a N , dove N è il numero di funzioni nella DLL . Il file di definizione del modulo ha l'estensione di seguito è riportato un esempio di un file di definizione del modulo , o un file DEF "DEF . ». : .
BIBLIOTECA ReportWriterDESCRIPTION Questa libreria dinamica contiene la funzionalità generatore di report di MyProduct.RPT_setup @ 1RPT_design @ @ 2RPT_run 3RPT_print @ 4
Se si crea una DLL MFC utilizzando creazione guidata applicazione di Visual Studio , la procedura guidata genera un file di scheletro. DEF per la DLL e aggiungerlo al progetto. Aggiungere le voci per le funzioni di DLL in questo file . DEF per esportarli . Il formato del prototipo di funzione utilizzata dal programma chiamante deve corrispondere al formato delle voci di funzione nel file . DEF . Utilizzare semplici definizioni in entrambi i luoghi , o compilatore specifico , generato dal compilatore definizioni di entrambi i luoghi costantemente .
Di importazione ed esportazione di estensione DLL
Microsoft Fondazione DLL classe di estensione consiste tipicamente di classi riutilizzabili derivate da tipi di classe MFC esistenti. Essi sono costruiti utilizzando una versione DLL di MFC , e possono essere richiamati dalle applicazioni e DLL costruite utilizzando questa versione condivisa di MFC . Per esportare le classi in DLL di estensione , utilizzare la macro " AFX_EXT_CLASS " prima del nome della classe in questo modo: Classe CMyViewClass AFX_EXT_CLASS : CView pubblico { //Corpo della classe }; Se si utilizza un file DEF , aggiungere il seguente codice macro all'inizio. e alla fine del file di intestazione DLL estesa : # undef AFX_DATA # define AFX_DATA AFX_EXT_DATA //
estesa # undef AFX_DATA # define AFX_DATA
Queste direttive del preprocessore assicurarsi che le variabili MFC e derivazioni ed esportate dalla DLL estesa.
Importazione di funzioni di DLL
l'altro lato l'esportazione di oggetti da loro DLL è l'importazione in applicazioni che utilizzano il " __declspec (dllimport ) "La parola chiave .
Export C Funzioni per l'utilizzo in C + + o eseguibili
Se il programma chiamante o la funzione è scritto in C + + , utilizzare il C " extern C " direttiva del preprocessore nell'intestazione DLL se le funzioni di DLL sono scritti in C.