Come ottenere un prototipo di funzione in DLL

June 1

Come ottenere un prototipo di funzione in DLL


Una libreria di collegamento dinamico o DLL, consente a un'applicazione per 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 in base alle specifiche del programmatore. Finché il programma in esecuzione non fa riferimento una funzione DLL, la DLL non deve occupare spazio. Ciò consente di risparmiare risorse e aumenta le prestazioni di runtime. Se la libreria fosse statica, tutto il codice della libreria saranno allegati al codice eseguibile del programma principale, e il programma di gigante avrebbe dovuto rimanere in memoria per l'intera fase di esecuzione. La versione Unix o Linux di una DLL di Windows è una libreria di oggetti condivisi che è costruito con l'estensione SO. Windows, Unix e Linux hanno convenzioni specifiche per accedere alle funzioni di DLL o librerie condivise.

istruzione

Export di Windows DLL oggetti mediante preprocessore Chiave

1 Nel file di intestazione DLL, mettere la parola "__declspec (dllexport)" prima che il prototipo di una variabile di funzione, di classe, membro della classe o dati nella DLL. Questa parola chiave si aggiunge la funzione di prototipo al tavolo di esportazione della DLL.

2 Utilizzare valori ordinali 1 a N al posto di nomi delle funzioni o membro di classe per risparmiare spazio occupato dalla tabella di esportazione del DLL, dove N è il numero di oggetti o funzioni nella DLL.

3 Aggiungere la parola chiave "__declspec (dllimport)" prima che i prototipi di funzione corrispondenti nel programma chiamante o DLL. Il programma chiamante importa le funzioni che le esportazioni DLL.

Funzioni di esportazione DLL di Windows utilizzando un file modulo Definizione

4 Creare un file di testo con il DEF estensione e aggiungerlo al progetto per la DLL in Visual Studio.

5 Aggiungere l'istruzione "LIBRERIA" con il nome del DLL dopo come segue:

BIBLIOTECA ReportWriter

6 Opzionalmente aggiungere una breve descrizione una linea per la DLL come segue:

DESCRIZIONE Questa è una DLL per la funzionalità di generazione di report in MyProduct.

Questo è raccomandato.

7 Aggiungere una voce per ogni membro della funzione o della classe che la DLL vuole esportare, con un numero cardinale opzionale. Il numero cardinale rappresenta la funzione e assume valori da 1 a N, dove N è il numero di funzioni esportate dalla DLL. Ecco un esempio:

RPT_init @ 1
RPT_design @ 2
RPT_run @ 3
RPT_print @ 4

Dopo aver collegato tutti i sorgenti e questo file DEF, il compilatore crea un file di esportazione con l'estensione EXP e un file di libreria di importazione, con l'estensione LIB. Il compilatore utilizza il file EXP per creare la DLL. Il file LIB è collegato al programma chiamante e contiene le informazioni di importazione sulle funzioni nella DLL.

Consigli e avvertenze

  • Per chiamare funzioni C in una DLL sia da un programma C o C ++, incapsulare i prototipi di funzione esportati nel "C extern {....}" direttiva del preprocessore come segue:
  • #ifdef __cplusplus
  • extern "C" {
  • #finisci se
  • __declspec (dllimport) RPT_init void (RPT * relazione);
  • __declspec (dllimport) BOOL RPT_design (RPT * relazione);
  • __declspec (dllimport) BOOL RPT_run (RPT * relazione);
  • __declspec (dllimport) BOOL RPT_print (RPT * relazione);
  • #ifdef __cplusplus
  • } // Staffa fine del "extern C" direttiva del preprocessore
  • #finisci se
  • Quando una DLL è fatta di classi derivate da Microsoft Foundation Classes in forma DLL, la nuova DLL viene chiamata una DLL di estensione MFC. Utilizzare la macro "AFX_EXT_CLASS" per esportare e importare i prototipi delle classi in MFC DLL estesi.
  • Per porta le applicazioni Windows a 16 bit a 32-bit di Windows, sostituire la parola "_export" e "_import" con "__declspec (dllexport)" e "__declspec (dllimport)", rispettivamente.