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();
}