Recibe un error LNK4197 en la versión de 64 bits del compilador Visual C++

Se aplica a: Visual C++ 2010 Express

Resumen


Al generar un archivo DLL con la versión de 64 bits del compilador de Microsoft Visual C++ y el vinculador, vinculador LNK4197 del número de error puede aparecer si se ha declarado una función para exportar más de una vez.

Síntomas


La salida del vinculador puede ser similar al siguiente:
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 

Causa


El vinculador LNK4197 del número de error se genera cuando se ha declarado una función para exportar más de una vez. Se declara una función para la exportación de una de las siguientes maneras:
  • La función se declara utilizando la palabra clave __declspec (dllexport) en el archivo de código fuente de C:
    __declspec(dllexport) int DllSample() {   return 42;}
  • La función se declara utilizando una definición de módulo (. Archivo DEF):
    EXPORTS   DllSample
Este error del vinculador puede producirse con más frecuencia cuando tanto la palabra clave __declspec (dllexport) y una. Archivo DEF se utilizan para definir el mismo nombre de función en una. Proyecto DLL.

Resolución


Para resolver este comportamiento, definir funciones exportadas sólo una vez, ya sea mediante la palabra clave __declspec (dllexport) o mediante una. Archivo DEF. No utilice ninguno de estos métodos.

Estado


Este comportamiento es una característica del diseño de la aplicación.

Más información


Declarar una función para exportar más de una vez puede no producir el error del vinculador que se describe en la sección "Síntomas" de este artículo en las versiones de 32 bits del vinculador y compilador de C++ de Microsoft Windows. Sin embargo, Microsoft recomienda que defina la función exportaciones sólo una vez en versiones de 32 bits y 64 bits del vinculador y compilador de C++ de Windows.