Chyba linkerů LNK2031
Nelze vygenerovat volání p/invoke pro function_declaration decorated_name; chybí konvence volání v metadatech
Poznámky
Při pokusu o import nativní funkce do čisté image nezapomeňte, že implicitní konvence volání se liší mezi nativními a čistými kompilacemi. Další informace o čistých obrázcích najdete v tématu Čistý a ověřitelný kód (C++/CLI).
Možnost /clr:pure compiler je v sadě Visual Studio 2015 zastaralá a v sadě Visual Studio 2017 není podporována.
Příklady
Tato ukázka kódu vygeneruje komponentu s exportovanou nativní funkcí, jejíž konvence volání je implicitně __cdecl.
// LNK2031.cpp
// compile with: /LD
extern "C" {
__declspec(dllexport) int func() { return 3; }
};
Následující ukázka vytvoří čistého klienta, který využívá nativní funkci. Konvence volání v rámci /clr:pure je však __clrcall. Následující ukázka vygeneruje LNK2031.
// LNK2031_b.cpp
// compile with: /clr:pure LNK2031.lib
// LNK2031 expected
extern "C" int func();
int main() {
return func();
}
Následující ukázka ukazuje, jak využívat nativní funkci z čisté image. Všimněte si specifikátoru explicitní __cdecl
konvence volání.
// LNK2031_c.cpp
// compile with: /clr:pure LNK2031.lib
extern "C" int __cdecl func();
int main() {
return func();
}