Erreur des outils Éditeur de liens LNK2031
impossible de générer p/invoke pour le decorated_name « function_declaration » ; convention d’appel manquante dans les métadonnées
Notes
Lorsque vous tentez d’importer une fonction native dans une image pure, n’oubliez pas que les conventions d’appel implicites diffèrent entre les compilations natives et pures. Pour plus d’informations sur les images pures, consultez Code pur et vérifiable (C++/CLI).
L’option /clr :pure compiler est déconseillée dans Visual Studio 2015 et non prise en charge dans Visual Studio 2017.
Exemples
Cet exemple de code génère un composant avec une fonction exportée, native, dont la convention d’appel est implicitement __cdecl.
// LNK2031.cpp
// compile with: /LD
extern "C" {
__declspec(dllexport) int func() { return 3; }
};
L’exemple suivant crée un client pur qui consomme la fonction native. Toutefois, la convention d’appel sous /clr :pure est __clrcall. L’exemple suivant génère LNK2031.
// LNK2031_b.cpp
// compile with: /clr:pure LNK2031.lib
// LNK2031 expected
extern "C" int func();
int main() {
return func();
}
L’exemple suivant montre comment utiliser la fonction native à partir d’une image pure. Notez le spécificateur de convention d’appel explicite __cdecl
.
// LNK2031_c.cpp
// compile with: /clr:pure LNK2031.lib
extern "C" int __cdecl func();
int main() {
return func();
}