Résumé
Lorsque vous générez une DLL à l’aide de la version 64 bits du compilateur de Microsoft Visual C++ et éditeur de liens, l’éditeur de liens LNK4197 numéro d’erreur peut s’afficher si une fonction a été déclarée à l’exportation plus d’une fois.
Symptômes
La sortie de l’éditeur de liens peut être semblable au suivant :
C:\>link /NOLOGO /def:Sample.def /pdb:Sample.pdb /out:Sample.dll Sample.objSample.obj : warning LNK4197: export 'DllSample' specified multiple times; using first specification Creating library Sample.lib and object Sample.exp
Cause
L’éditeur de liens LNK4197 numéro d’erreur est généré lorsqu’une fonction a été déclarée pour l’exportation plus d’une fois. Une fonction est déclarée à l’exportation dans une des manières suivantes :
-
La fonction est déclarée à l’aide du mot clé __declspec (dllexport) dans votre fichier de code source C :
__declspec(dllexport) int DllSample() { return 42;}
-
La fonction est déclarée à l’aide d’une définition de module (. Fichier DEF) :
EXPORTS DllSample
Cette erreur de l’éditeur de liens peut se produire plus fréquemment lorsque les deux le mot clé __declspec (dllexport) et un. Fichier DEF permettent de définir le même nom de fonction dans un. Projet DLL.
Résolution
Pour résoudre ce problème, définir les fonctions exportées qu’une seule fois, soit en utilisant le mot clé __declspec (dllexport) , soit en utilisant un. Fichier de définition. N’utilisez pas ces deux méthodes.
Statut
Ce comportement est inhérent au produit.
Informations supplémentaires
La déclaration multiple d'une fonction pour l'exportation peut ne pas produire l'erreur de l'éditeur de liens qui est décrite dans la section « Symptômes » de cet article dans les versions 32 bits du compilateur et de l'éditeur de liens Microsoft Windows C++. Toutefois, Microsoft vous recommande de ne définir les fonctions exportées qu'une seule fois dans les versions 32 bits et 64 bits du compilateur et de l'éditeur de liens de Windows C++.