Esportazione di funzioni C per l'utilizzo in eseguibili in linguaggio C o C++
Aggiornamento: novembre 2007
Se in una DLL scritta in C sono presenti funzioni a cui si desidera accedere da un modulo in linguaggio C o C++, è necessario utilizzare la macro del preprocessore __cplusplus per determinare il linguaggio di compilazione e quindi dichiarare queste funzioni con il collegamento C se devono essere utilizzate da un modulo in linguaggio C++. Se si utilizza questa tecnica e si forniscono i file di intestazione per la DLL, queste funzioni possono essere utilizzate dagli utenti di C e C++ senza modifiche.
Nell'esempio di codice riportato di seguito viene illustrato un file di intestazione che può essere utilizzato da applicazioni client C e C++:
// MyCFuncs.h
#ifdef __cplusplus
extern "C" { // only need to export C interface if
// used by C++ source code
#endif
__declspec( dllimport ) void MyCFunc();
__declspec( dllimport ) void AnotherCFunc();
#ifdef __cplusplus
}
#endif
Se è necessario collegare le funzioni C all'eseguibile C++ e non è stata utilizzata la tecnica precedente per i file di intestazione della dichiarazione di funzione, nel file sorgente C++ procedere come descritto di seguito per evitare che il compilatore effettui la decorazione dei nomi delle funzioni C:
extern "C" {
#include "MyCHeader.h"
}