Compartir a través de


Error de las herramientas del vinculador LNK2031

no se puede generar p/invoke para "function_declaration" decorated_name; falta la convención de llamada en los metadatos

Comentarios

Al intentar importar una función nativa en una imagen pura, recuerde que las convenciones de llamada implícitas difieren entre compilaciones nativas y puras. Para más información sobre las imágenes puras, consulte Código puro y comprobable (C++/CLI).

La opción del compilador /clr:pure está en desuso en Visual Studio 2015 y no se admite en Visual Studio 2017.

Ejemplos

Este ejemplo de código genera un componente con una función nativa exportada cuya convención de llamada es implícita __cdecl.

// LNK2031.cpp
// compile with: /LD
extern "C" {
   __declspec(dllexport) int func() { return 3; }
};

En el ejemplo siguiente se crea un cliente puro que consume la función nativa. Sin embargo, la convención de llamada en /clr:pure es __clrcall. En el ejemplo siguiente se genera LNK2031.

// LNK2031_b.cpp
// compile with: /clr:pure LNK2031.lib
// LNK2031 expected
extern "C" int func();

int main() {
   return func();
}

En el ejemplo siguiente se muestra cómo consumir la función nativa de una imagen pura. Tenga en cuenta el especificador de convención de llamada __cdecl explícita.

// LNK2031_c.cpp
// compile with: /clr:pure LNK2031.lib
extern "C" int __cdecl func();

int main() {
   return func();
}