Nwlapcug.com


Come ottenere un prototipo di funzione di DLL



Una libreria a 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. Fintanto che il programma in esecuzione non fa riferimento a una funzione DLL, la DLL non bisogno di occupare spazio. Questo consente di risparmiare risorse e aumenta le prestazioni del runtime. Se la libreria statica, tutto il codice di libreria dovrebbe essere aggiunto al codice eseguibile del programma principale, e il programma gigante avrebbe dovuto rimanere in memoria dell'intero runtime. La versione di una DLL di Windows Unix o Linux è una libreria di oggetti condivisi che è costruita con l'estensione so Windows, Unix e Linux hanno convenzioni specifiche per accedere alle funzioni nella dll o librerie condivise.

Istruzioni

Esportare gli oggetti DLL di Windows utilizzando la parola chiave del preprocessore

1

Nel file di intestazione DLL, è necessario inserire la parola chiave declspec (dllexport)"prima del prototipo di una funzione, la classe, la variabile membro o dati di classe nella DLL. Questa parola chiave aggiunge il prototipo di funzione alla tabella di esportazione della DLL.

2

Utilizzare valori ordinali 1 a N al posto di nomi dei membri di classe o funzione per risparmiare spazio occupato dalla tabella di esportazione della DLL, dove N è il numero di oggetti o funzioni nella DLL.

3

Aggiungere la parola chiave declspec (dllimport)"prima i prototipi di funzione corrispondente nel programma chiamante o DLL. Il programma chiamante consente di importare le funzioni che la DLL esporta.

Esportare le funzioni DLL di Windows utilizzando un File di definizione di modulo

4

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

5

Aggiungere l'istruzione di "Biblioteca" con il nome della DLL dopo esso come segue:

LIBRERIA ReportWriter

6

Facoltativamente aggiungere una breve descrizione per la DLL come segue:

Descrizione si tratta di una DLL per funzionalità di generazione di report in MyProduct.

Questo è consigliato.

7

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

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

Dopo aver collegato tutto il codice sorgente 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 è legato al programma chiamante e conserva le informazioni di importazione sulle funzioni nella DLL.

Consigli & Avvertenze

  • Per chiamare funzioni C in una DLL da programma C o C++, incapsulare i prototipi di funzione esportata nella direttiva per il preprocessore "extern C {...}" come segue:
  • #ifdef cplusplus
  • extern "C" {
  • #endif
  • declspec (dllimport) void RPT_init (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
  • } / / fine staffa della direttiva per il preprocessore "extern C"
  • #endif
  • Quando una DLL è costituita da classi che derivano 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 prototipi delle classi in MFC esteso dll.
  • Per la porta di applicazioni Windows 16 bit a 32-bit di Windows, sostituire la parola chiave "Export" e "_import" con declspec (dllexport)"e declspec (dllimport)" rispettivamente.