Exportation de fonctions C à utiliser dans des exécutables en langage C ou C++
Mise à jour : novembre 2007
Si, dans une DLL écrite en C, vous avez des fonctions auxquelles vous souhaitez accéder à partir d'un module rédigé en langage C ou C++, vous devez utiliser la macro de préprocesseur __cplusplus pour déterminer le langage compilé, puis déclarer ces fonctions à l'aide d'une liaison C en cas d'utilisation à partir d'un module en C++. Si vous utilisez cette technique et fournissez des fichiers d'en-tête pour votre DLL, ces fonctions peuvent être utilisées par des utilisateurs C et C++ sans modification.
Le code suivant montre un fichier d'en-tête qui peut être utilisé par des applications clientes en C et 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
Si vous devez lier des fonctions C à votre exécutable C++ et que les fichiers d'en-tête de déclaration de fonctions n'ont pas utilisé la technique ci-dessus, accédez au fichier source en C++ puis procédez de la façon suivante pour empêcher le compilateur de décorer les noms de fonctions du C :
extern "C" {
#include "MyCHeader.h"
}
Que voulez-vous faire ?
Exporter à partir d'une DLL à l'aide de __declspec(dllexport)
Importer dans une application à l'aide de __declspec(dllimport)