Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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;
};