Condividi tramite


/EXPORT (Esporta una funzione)

Esporta una funzione per nome o ordinale o dati dal programma.

Sintassi

/EXPORT:entryname[,@ordinal[,NONAME]][,DATA]

Osservazioni:

L'opzione /EXPORT specifica una funzione o un elemento di dati da esportare dal programma in modo che altri programmi possano chiamare la funzione o usare i dati. Le esportazioni sono in genere definite in una DLL.

Il nome della voce è il nome della funzione o dell'elemento di dati perché deve essere usato dal programma chiamante. ordinale specifica un indice nella tabella delle esportazioni nell'intervallo compreso tra 1 e 65.535. Se non si specifica l'ordinale, LINK ne assegna uno. La parola chiave NONAME esporta la funzione solo come ordinale, senza un nome voce.

La parola chiave DATA specifica che l'elemento esportato è un elemento di dati. L'elemento di dati nel programma client deve essere dichiarato usando extern __declspec(dllimport).

Esistono quattro metodi per l'esportazione di una definizione, elencati nell'ordine consigliato di utilizzo:

  1. __declspec(dllexport) nel codice sorgente

  2. Un'istruzione EXPORTS in un file con estensione def

  3. Specifica /EXPORT in un comando LINK

  4. Direttiva commento nel codice sorgente, del formato #pragma comment(linker, "/export: definition ").

Tutti questi metodi possono essere usati nello stesso programma. Quando LINK compila un programma che contiene esportazioni, crea anche una libreria di importazione, a meno che non venga usato un file con estensione exp nella compilazione.

LINK usa forme decorate di identificatori. Il compilatore decora un identificatore quando crea il file .obj. Se entryname viene specificato al linker nel formato non dichiarato (come viene visualizzato nel codice sorgente), LINK tenta di trovare la corrispondenza con il nome. Se non riesce a trovare una corrispondenza univoca, LINK genera un messaggio di errore. Usare lo strumento DUMPBIN per ottenere il formato del nome decorato di un identificatore quando è necessario specificarlo al linker.

Nota

Non specificare la forma decorata di identificatori C dichiarati __cdecl o __stdcall.

Se è necessario esportare un nome di funzione non dichiarato e si hanno esportazioni diverse a seconda della configurazione di compilazione ( ad esempio, nelle compilazioni a 32 bit o a 64 bit), è possibile usare file DEF diversi per ogni configurazione. Le direttive condizionali del preprocessore non sono consentite nei file DEF. In alternativa, è possibile usare una #pragma comment direttiva prima di una dichiarazione di funzione, come illustrato di seguito, dove PlainFuncName è il nome non dichiarato e _PlainFuncName@4 è il nome decorato della funzione:

#pragma comment(linker, "/export:PlainFuncName=_PlainFuncName@4")
BOOL CALLBACK PlainFuncName( Things * lpParams)

Per impostare questa opzione del linker nell'ambiente di sviluppo di Visual Studio

  1. Aprire la finestra di dialogo Pagine delle proprietà del progetto. Per informazioni dettagliate, vedere Impostare il compilatore e le proprietà di compilazione.

  2. Selezionare la pagina delle >proprietà Proprietà del linker della riga di comando del linker>di configurazione.

  3. Immettere l'opzione nella casella Opzioni aggiuntive .

Per impostare l'opzione del linker a livello di codice

Vedi anche

Informazioni di riferimento sul linker MSVC
Opzioni del linker MSVC