Delen via


Fout bij linkertool LNK2031

kan geen p/invoke genereren voor function_declarationdecorated_name; oproepconventie ontbreekt in metagegevens

Opmerkingen

Wanneer u een systeemeigen functie in een pure afbeelding probeert te importeren, moet u er rekening mee houden dat de impliciete aanroepende conventies verschillen tussen systeemeigen en pure compilaties. Zie Pure en Verifiable Code (C++/CLI) voor meer informatie over pure afbeeldingen.

De optie /clr:pure compiler is afgeschaft in Visual Studio 2015 en wordt niet ondersteund in Visual Studio 2017.

Voorbeelden

In dit codevoorbeeld wordt een onderdeel gegenereerd met een geƫxporteerde, systeemeigen functie waarvan de aanroepconventie impliciet __cdecl.

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

In het volgende voorbeeld wordt een pure client gemaakt die de systeemeigen functie verbruikt. De oproepconventie onder /clr:pure is echter __clrcall. In het volgende voorbeeld wordt LNK2031 gegenereerd.

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

int main() {
   return func();
}

In het volgende voorbeeld ziet u hoe u de natuurlijke functie uit een zuivere afbeelding gebruikt. Let op de expliciete __cdecl aanroepconventieaanduiding.

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

int main() {
   return func();
}