Exporter des fonctions C à utiliser dans des exécutables de langage C ou C++
Si vous avez des fonctions dans une DLL écrite en C, vous pouvez utiliser une macro de préprocesseur pour faciliter l’accès à partir du langage C et du code de langage C++. La __cplusplus
macro de préprocesseur indique le langage en cours de compilation. Vous pouvez l’utiliser pour déclarer les fonctions avec liaison C lorsqu’elles sont appelées à partir du code de langage C++. Si vous utilisez cette technique et fournissez des fichiers d’en-tête pour votre DLL, ces fonctions peuvent être utilisées par les utilisateurs C et C++ sans modification.
Le code suivant montre un fichier d’en-tête que les applications clientes C et C++ peuvent utiliser :
// 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
Parfois, vous devrez peut-être lier des fonctions C à votre exécutable C++, mais les fichiers d’en-tête de déclaration de fonction n’ont pas utilisé la technique ci-dessus. Vous pouvez toujours appeler les fonctions à partir de C++. Dans le fichier source C++, encapsulez la #include
directive pour empêcher le compilateur de décorer les noms de fonctions 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)