Partilhar via


Erro das ferramentas de ligação LNK2031

incapaz de gerar p/invoke para "function_declaration" decorated_name; Convenção de chamada ausente nos metadados

Observações

Ao tentar importar uma função nativa para uma imagem pura, lembre-se de que as convenções de chamada implícitas diferem entre compilações nativas e puras. Para obter mais informações sobre imagens puras, consulte Código puro e verificável (C++/CLI).

A opção de compilador /clr:pure foi preterida no Visual Studio 2015 e não tem suporte no Visual Studio 2017.

Examples

Este exemplo de código gera um componente com uma função exportada, nativa, cuja convenção de chamada é implicitamente __cdecl.

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

O exemplo a seguir cria um cliente puro que consome a função nativa. No entanto, a convenção de chamada em /clr:pure é __clrcall. O exemplo a seguir gera LNK2031.

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

int main() {
   return func();
}

O exemplo a seguir mostra como consumir a função nativa de uma imagem pura. Observe o especificador explícito de convenção de chamada __cdecl.

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

int main() {
   return func();
}