Dela via


Länkverktygsfel LNK2022

metadataåtgärden misslyckades (HRESULT) : error_message

Länkaren upptäckte ett fel vid sammanslagning av metadata. Metadatafelen måste lösas för att länkningen ska bli framgångsrik.

Ett sätt att diagnostisera det här problemet är att köra ildasm -tokens på objektfilerna för att hitta vilka typer som har de token som anges i error_messageoch leta efter skillnader. I metadata är två olika typer med samma namn ogiltiga, även om attributet just LayoutType är annorlunda.

En orsak till LNK2022 är när en typ (till exempel en struct) finns i flera kompileringar med samma namn, men med motstridiga definitioner och när du kompilerar med /clr. I det här fallet kontrollerar du att typen har en identisk definition i alla kompileringar. Typnamnet visas i error_message.

En annan möjlig orsak till LNK2022 är när länkaren hittar en metadatafil på en annorlunda plats än vad som angavs för kompilatorn (med #using). Kontrollera att metadatafilen (.dll eller .netmodule) finns på samma plats när den skickas till länkaren, som den var när den skickades till kompilatorn.

När du skapar ett ATL-program krävs användning av makrot _ATL_MIXED i alla kompileringar, om det används i minst ett.

Examples

Följande exempel definierar en tom typ.

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

Det här exemplet visar att du inte kan länka två källkodsfiler som innehåller typer av samma namn men olika definitioner.

Följande exempel genererar LNK2022.

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