Partager via


IMetaDataEmit::MergeEnd Method

Fusionne dans l’étendue actuelle toutes les étendues de métadonnées spécifiées par un ou plusieurs appels antérieurs à IMetaDataEmit ::Merge.

Syntax

HRESULT MergeEnd ();

Parameters

Cette méthode ne prend aucun paramètre.

Remarks

Cette routine déclenche la fusion réelle des métadonnées, de toutes les étendues d’importation spécifiées par les appels précédents à IMetaDataEmit::Merge, dans l’étendue de sortie actuelle.

Les conditions spéciales suivantes s’appliquent à la fusion :

  • Un identificateur de version de module (MVID) n’est jamais importé, car il est unique aux métadonnées de l’étendue d’importation.

  • Aucune propriété existante à l’échelle du module n’est remplacée.

    Si les propriétés du module ont déjà été définies pour l’étendue actuelle, aucune propriété de module n’est importée. Toutefois, si les propriétés du module n’ont pas été définies dans l’étendue actuelle, elles ne sont importées qu’une seule fois, lorsqu’elles sont rencontrées pour la première fois. Si ces propriétés de module sont à nouveau rencontrées, elles sont des doublons. Si les valeurs de toutes les propriétés de module (à l’exception de MVID) sont comparées et qu’aucun doublon n’est trouvé, une erreur est générée.

  • Pour les définitions de type (TypeDef), aucun doublon n’est fusionné dans l’étendue actuelle. TypeDefles objets sont vérifiés pour les doublons par rapport à chaquenuméro de versionGUID + du nom + d’objet complet. S’il existe une correspondance sur un nom ou un GUID et que l’un des deux autres éléments est différent, une erreur est générée. Sinon, si les trois éléments correspondent, MergeEnd effectue une vérification pointeuse pour vérifier que les entrées sont en effet dupliquées ; sinon, une erreur est générée. Cette vérification de curseur recherche :

    • Les mêmes déclarations de membre, qui se produisent dans le même ordre. Les membres marqués comme mdPrivateScope étant (voir l’énumération CorMethodAttr ) ne sont pas inclus dans cette vérification ; ils sont fusionnés spécialement.

    • La même disposition de classe.

    Cela signifie qu’un TypeDef objet doit toujours être entièrement et constamment défini dans chaque étendue de métadonnées dans laquelle il est déclaré ; si ses implémentations membres (pour une classe) sont réparties sur plusieurs unités de compilation, la définition complète est supposée être présente dans chaque étendue et non incrémentielle à chaque étendue. Par exemple, si les noms de paramètres sont pertinents pour le contrat, ils doivent être émis de la même façon dans chaque étendue ; s’ils ne sont pas pertinents, ils ne doivent pas être émis dans les métadonnées.

    L’exception est qu’un TypeDef objet peut avoir des membres incrémentiels marqués comme mdPrivateScope. En cas de rencontre, MergeEnd les ajoute de manière incrémentielle à l’étendue actuelle sans tenir compte des doublons. Étant donné que le compilateur comprend l’étendue privée, le compilateur doit être responsable de l’application des règles.

  • Les adresses virtuelles relatives (RVA) ne sont pas importées ou fusionnées ; le compilateur est censé réécrire ces informations.

  • Les attributs personnalisés sont fusionnés uniquement lorsque l’élément auquel ils sont attachés est fusionné. Par exemple, les attributs personnalisés associés à une classe sont fusionnés lorsque la classe est rencontrée pour la première fois. Si des attributs personnalisés sont associés à une TypeDef unité de compilation spécifique MemberDef ou spécifique à l’unité de compilation (par exemple, l’horodatage d’une compilation de membre), ils ne sont pas fusionnés et le compilateur doit supprimer ou mettre à jour ces métadonnées.

Requirements

Plates-formes: Consultez les systèmes d’exploitation pris en charge par .NET.

Header: Cor.h

Library: CorGuids.lib

See also