Condividi tramite


Scelta del metodo di esportazione da utilizzare

È possibile esportare funzioni in uno di due file di supporto a un def o la parola chiave di __declspec(dllexport).Per individuare il metodo è preferibile per la DLL, si considerino le seguenti domande:

  • Si intende esportare successivamente più funzioni?

  • La DLL viene utilizzata solo da applicazioni che è possibile ricompilare, oppure è utilizzato da applicazioni che non è possibile ricostruzione-, ad esempio applicazioni create da terze parti?

Pro e contro di utilizzo dei file def

L'esportazione delle funzioni in un file def fornisce il controllo sugli ordinali di esportazione.Quando si aggiunge una funzione esportata nella DLL, è possibile assegnarle un valore ordinale più elevato di qualsiasi altra funzione esportata.In questo caso, le applicazioni che utilizzano il collegamento implicito non devono ricollegarsi alla libreria di importazione che contiene la nuova funzione.È molto utile se si progetta una DLL da molte applicazioni perché è possibile aggiungere nuove funzionalità e inoltre necessario assicurarsi che continuerà a funzionare correttamente con applicazioni già si basano su.Ad esempio, le DLL MFC vengono compilati tramite i file def.

Un altro vantaggio a un file def è che è possibile utilizzare l'attributo di NONAME per esportare una funzione.Verrà inserito soltanto l'ordinale nella tabella di esportazione della DLL.Per le DLL con molte funzioni esportate, utilizzando l'attributo di NONAME può ridurre le dimensioni del file DLL.Per informazioni su come scrivere un'istruzione di definizione moduli, vedere Regole relative alle istruzioni di definizione dei moduli.Per informazioni sull'esportazione ordinale, vedere Esportazione di funzioni da una DLL in base al numero ordinale anziché al nome.

Uno svantaggio di utilizzare un file def è che se si esportano le funzioni in un file c++, è necessario inserire i nomi decorati nel file def o definire le funzioni esportate utilizzando Extern "c" per evitare la decorazione dei nomi che viene eseguita dal compilatore Visual C++.

Se si inserisce i nomi decorati nel file def, è possibile utilizzare lo strumento di DUMPBIN o l'opzione di /MAP del linker.I nomi decorati che vengono creati dal compilatore nel compilatore specifici; pertanto, se si inserisce i nomi decorati che vengono creati dal compilatore in un file def, le applicazioni che si collegano alla DLL devono essere compilate utilizzando la stessa versione del compilatore in modo che i nomi decorati nell'applicazione chiamante corrispondano ai nomi esportati nel file def della DLL.

Pro e contro dell'utilizzo di __declspec(dllexport)

Utilizzando __declspec(dllexport) è vantaggioso perché evita di dover gestire un file def e ottenere i nomi decorati delle funzioni esportate.Tuttavia, l'utilità della modalità di esportazione è limitata dal numero di applicazioni collegate che si è disposti alla ricompilazione.Se si ricompila la DLL con nuove esportazioni, è necessario ricompilare le applicazioni perché i nomi decorati delle funzioni C++ esportate potrebbero cambiare se si utilizza una versione diversa del compilatore per ricompilarlo.

900axts6.collapse_all(it-it,VS.110).gifScegliere l'argomento con cui si desidera procedere

900axts6.collapse_all(it-it,VS.110).gifScegliere l'argomento su cui visualizzare maggiori informazioni

Vedere anche

Concetti

Esportazione da una DLL