Condividi tramite


Errore degli strumenti del linker LNK2031

impossibile generare p/invoke per decorated_name "function_declaration" ; convenzione di chiamata mancante nei metadati

Osservazioni:

Quando si tenta di importare una funzione nativa in un'immagine pura, tenere presente che le convenzioni di chiamata implicite differiscono tra compilazioni native e pure. Per altre informazioni sulle immagini pure, vedere Codice puro e verificabile (C++/CLI).

L'opzione del compilatore /clr:pure è deprecata in Visual Studio 2015 e non supportata in Visual Studio 2017.

Esempi

Questo esempio di codice genera un componente con una funzione esportata, nativa, la cui convenzione di chiamata viene __cdecl in modo implicito.

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

L'esempio seguente crea un client puro che utilizza la funzione nativa. Tuttavia, la convenzione di chiamata in /clr:pure è __clrcall. L'esempio seguente genera LNK2031.

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

int main() {
   return func();
}

L'esempio seguente illustra come utilizzare la funzione nativa da un'immagine pura. Prendere nota dell'identificatore di convenzione di chiamata esplicito __cdecl .

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

int main() {
   return func();
}