Condividi tramite


Scelta del metodo di esportazione da utilizzare

È possibile esportare funzioni in uno di due file delle modalità - un file def o la parola chiave di __declspec(dllexport). Per individuare il metodo è consigliato 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 dell'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 questi casi, 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 che verrà utilizzata 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 utilizzando i file def.

Un altro vantaggio dell'utilizzo di 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 NONAME può ridurre le dimensioni del file DLL. Per informazioni su come scrivere un'istruzione di definizione di modulo, 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 di Visual C++.

Se si inseriscono i nomi decorati nel file def, è possibile utilizzare lo strumento di DUMPBIN o utilizzando l'opzione /MAP del linker. I nomi decorati che vengono creati dal compilatore nel compilatore specifici; pertanto, se si inseriscono i nomi decorati che vengono creati dal compilatore in un file def, anche le applicazioni collegate 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 mantenere 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 a ricompilazione. Se si ricompila la DLL con nuove esportazioni, è necessario ricompilare le applicazioni poiché i nomi decorati delle funzioni C++ esportate potrebbero cambiare se si utilizza una versione diversa del compilatore per ricompilarlo.

Scegliere l'argomento con cui si desidera procedere

Scegliere l'argomento su cui visualizzare maggiori informazioni

Vedere anche

Concetti

Esportazione da una DLL