Linkertoolfehler LNK2031

P/Invoke für "function_declaration"-decorated_name konnte nicht generiert werden. Aufrufkonvention fehlt in Metadaten

Hinweise

Beachten Sie beim Versuch, eine systemeigene Funktion in ein reines Bild zu importieren, dass sich die impliziten Aufrufkonventionen zwischen nativen und reinen Kompilierungen unterscheiden. Weitere Informationen zu reinen Bildern finden Sie unter Pure and Verifiable Code (C++/CLI).For more information about pure images, see Pure and Verifiable Code (C++/CLI).

Die Option "/clr:pure compiler" ist in Visual Studio 2015 veraltet und wird in Visual Studio 2017 nicht unterstützt.

Beispiele

In diesem Codebeispiel wird eine Komponente mit einer exportierten, nativen Funktion generiert, deren Aufrufkonvention implizit __cdecl wird.

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

Im folgenden Beispiel wird ein reiner Client erstellt, der die systemeigene Funktion verwendet. Die Aufrufkonvention unter "/clr:pure " ist jedoch __clrcall. Im folgenden Beispiel wird LNK2031 generiert.

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

int main() {
   return func();
}

Das folgende Beispiel zeigt, wie die systemeigene Funktion aus einem reinen Bild verwendet wird. Beachten Sie den expliziten __cdecl Aufrufkonventionsbezeichner.

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

int main() {
   return func();
}