Partilhar via


Erro de ferramentas de vinculação LNK2022

falha na operação de metadados (HRESULT): error_message

O vinculador detetou um erro ao mesclar metadados. Os erros de metadados devem ser resolvidos para vincular com êxito.

Uma maneira de diagnosticar esse problema é executar ildasm -tokens nos arquivos de objeto para encontrar quais tipos têm os tokens listados no error_message, e procurar diferenças. Nos metadados, dois tipos diferentes com o mesmo nome não são válidos, mesmo que o atributo apenas LayoutType seja diferente.

Uma razão para LNK2022 é quando um tipo (como um struct) existe em vários compilands com o mesmo nome, mas com definições conflitantes, e quando você compila com /clr. Nesse caso, certifique-se de que o tipo tem uma definição idêntica em todos os compiladores. O nome do tipo está listado em error_message.

Outra causa possível para LNK2022 é quando o vinculador encontra um arquivo de metadados em um local diferente do especificado para o compilador (com #using). Certifique-se de que o arquivo de metadados (.dll ou .netmodule) está no mesmo local quando passado para o vinculador, como estava quando foi passado para o compilador.

Ao criar um aplicativo ATL, o uso da macro _ATL_MIXED é necessário em todos os compiladores, se for usado em pelo menos um.

Examples

O exemplo a seguir define um tipo vazio.

// LNK2022_a.cpp
// compile with: /clr /c
public ref class Test {};

Este exemplo mostra que não é possível vincular dois arquivos de código-fonte que contêm tipos do mesmo nome, mas definições diferentes.

O exemplo a seguir gera LNK2022.

// LNK2022_b.cpp
// compile with: LNK2022_a.cpp /clr /LD
// LNK2022 expected
public ref class Test {
   void func() {}
   int var;
};