Maison > Article > développement back-end > Comment résoudre les erreurs de l'éditeur de liens lors de l'appel de fonctions C à partir d'un projet C distinct dans Visual Studio 2010 ?
Comprendre le problème :
Un développeur a rencontré une erreur de l'éditeur de liens lors de la tentative d'appel d'une fonction C à partir d'un projet C dans une autre solution Visual Studio 2010. Malgré l'utilisation de mots-clés externes et l'inclusion d'un en-tête, le projet n'a pas réussi à établir un lien vers la bibliothèque C, ce qui a entraîné une erreur de « symbole externe non résolu ».
Correction de la structure :
Pour résoudre le problème, la structure du projet pour les fonctions C doit être réorganisée et renommée. Au lieu d'inclure les définitions de fonctions C dans l'en-tête, l'en-tête doit simplement déclarer les fonctions externes avec les conventions d'appel correctes. L'implémentation de ces fonctions doit être déplacée vers un fichier source C distinct.
Exportation des fonctions :
L'exportation des fonctions C se fait en définissant une macro dans la source C déposer. Lorsque le projet est compilé, cette macro définit les fonctions telles qu'exportées. Dans le projet C, l'en-tête doit être inclus en premier pour définir les fonctions externes, suivi des macros appropriées pour marquer les fonctions comme importées.
Structure de fichier suggérée :
Exemples de fichiers :
functions.h
<code class="c">#pragma once #if defined(_WIN32) #if defined(FUNCTIONS_STATIC) #define FUNCTIONS_EXPORT_API #else #if defined(FUNCTIONS_EXPORTS) #define FUNCTIONS_EXPORT_API __declspec(dllexport) #else #define FUNCTIONS_EXPORT_API __declspec(dllimport) #endif #endif #else #define FUNCTIONS_EXPORT_API #endif #if defined(__cplusplus) extern "C" { #endif FUNCTIONS_EXPORT_API char *dtoa(double, int, int, int*, int*, char**); FUNCTIONS_EXPORT_API char *g_fmt(char*, double); FUNCTIONS_EXPORT_API void freedtoa(char*); #if defined(__cplusplus) } #endif</code>
functions.c
<code class="c">#define FUNCTIONS_EXPORTS #include "functions.h" char *dtoa(double, int, int, int*, int*, char**) { //function statements } char *g_fmt(char*, double) { //function statements } void freedtoa(char*) { //function statements }</code>
En implémentant ces modifications, l'erreur de l'éditeur de liens devrait être résolue et le projet C pourra se lier avec succès et appeler les fonctions C définies dans le projet séparé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!