Поделиться через


IMetaDataEmit::DefineImportMember Method

Создает ссылку на указанный элемент типа или модуля, определенного вне текущей области, и определяет маркер для этой ссылки.

Syntax

HRESULT DefineImportMember (
    [in]  IMetaDataAssemblyImport  *pAssemImport,
    [in]  const void               *pbHashValue,
    [in]  ULONG                    cbHashValue,
    [in]  IMetaDataImport          *pImport,
    [in]  mdToken                  mbMember,
    [in]  IMetaDataAssemblyEmit    *pAssemEmit,
    [in]  mdToken                  tkParent,
    [out] mdMemberRef              *pmr
);

Parameters

pAssemImport [in] Интерфейс IMetaDataAssemblyImport , представляющий сборку, из которой импортируется целевой элемент.

pbHashValue [in] Массив, содержащий хэш для сборки, указанной pAssemImport.

cbHashValue [in] Количество байтов в массиве pbHashValue .

pImport [in] Интерфейс IMetaDataImport , представляющий область метаданных, из которой импортируется целевой элемент.

mbMember [in] Маркер метаданных, указывающий целевой элемент. Маркер может быть маркером mdMethodDef (для метода члена), mdProperty (для свойства члена) или mdFieldDef (для поля члена).

pAssemEmit [in] Интерфейс IMetaDataAssemblyEmit , представляющий сборку, в которую импортируется целевой элемент.

tkParent[in] mdModuleRef Маркер mdTypeRef типа или модуля соответственно, принадлежащий целевому элементу.

pmr [out] Маркер mdMemberRef , определенный в текущей области для ссылки на член.

Remarks

Метод DefineImportMember ищет элемент, указанный mbMemberв другой области, указанной в другой области, и pImportизвлекает его свойства. Эта информация используется для вызова метода IMetaDataEmit::D efineMemberRef в текущей области для создания ссылки на член.

Как правило, перед использованием DefineImportMember метода необходимо создать в текущей области ссылку на тип или ссылку на модуль для родительского класса, интерфейса или модуля целевого члена. Затем маркер метаданных для этой ссылки передается в tkParent аргументе. Если он будет разрешен компилятором или компоновщиком, вам не нужно создать ссылку на родительский элемент целевого элемента. To summarize:

  • Если целевой элемент является полем или методом, используйте метод IMetaDataEmit::D efineTypeRefByName или метод IMetaDataEmit::D efineImportType для создания ссылки на тип в текущей области для родительского класса или родительского интерфейса члена.

  • Если целевой член является глобальной переменной или глобальной функцией (то есть не членом класса или интерфейса), используйте метод IMetaDataEmit::D efineModuleRef для создания ссылки на модуль в текущей области для родительского модуля члена.

  • Если родительский элемент целевого элемента будет разрешен позже компилятором или компоновщиком, то передайте mdTokenNil его tkParent. Единственный сценарий, в котором это применимо, заключается в том, что глобальная функция или глобальная переменная импортируются из файла .obj, который в конечном итоге будет связан с текущим модулем и объединенными метаданными.

Requirements

Платформ: См. сведения о поддерживаемых операционных системах .NET.

Header: Cor.h

Library: CorGuids.lib

See also