Vous recevez une erreur LNK4197 dans la version 64 bits du compilateur Visual C++

S’applique à : Visual C++ 2010 Express

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++.