Compartilhar via


Método IMetaDataEmit::DefineMethod

Cria uma definição para um método ou uma função global com a assinatura especificada e retorna um token a definição desse método.

HRESULT DefineMethod (    
    [in]  mdTypeDef         td, 
        [in]  LPCWSTR           szName, 
    [in]  DWORD             dwMethodFlags, 
        [in]  PCCOR_SIGNATURE   pvSigBlob, 
    [in]  ULONG             cbSigBlob, 
    [in]  ULONG             ulCodeRVA, 
    [in]  DWORD             dwImplFlags, 
    [out] mdMethodDef      *pmd
);

Parâmetros

  • td
    [in] The mdTypedef símbolo da classe pai ou interface pai do método. conjunto td para mdTokenNil, se você estiver definindo uma função global.

  • szName
    [in] O nome do membro em Unicode.

  • dwMethodFlags
    [in] Um valor igual a CorMethodAttr enumeração que especifica os atributos de método ou função global.

  • pvSigBlob
    [in] A assinatura do método. A assinatura é persistida fornecido. Se você precisar especificar informações adicionais para qualquer parâmetro, use o IMetaDataEmit::SetParamProps método.

  • cbSigBlob
    [in] A contagem de bytes em pvSigBlob.

  • ulCodeRVA
    [in] O endereço do código.

  • dwImplFlags
    [in] Um valor igual a CorMethodImpl enumeração que especifica os recursos de implementação do método.

  • pmd
    [out] O token de membro.

Comentários

sistema autônomo metadados API garante persistir sistema autônomo métodos na mesma ordem emite o chamador-los para uma determinada classe de delimitador ou interface, que é especificada no td parâmetro.

Informações adicionais sobre o uso da DefineMethod e as configurações de parâmetro específico é fornecido abaixo.

Slots na tabela de V

O tempo de execução usa definições de método conjunto até v tabela slots. No caso em que um ou mais slots precise ser ignorados, por exemplo, para preservar a paridade com um layout de interface COM, um método fictício é definido para ocupar o slot ou slots na tabela de v; conjunto o dwMethodFlags para o mdRTSpecialName valor da CorMethodAttr enumeração e especifique o nome sistema autônomo:

_VtblGap <SequenceNumber><_CountOfSlots>

em que SequenceNumber é o número de sequência de método e CountOfSlots é o número de slots para ignorar na tabela de v. If CountOfSlots for omitido, 1 será utilizado. Esses métodos fictícios não são telefonar capaz de código gerenciado ou e qualquer tentativa de telefonar, do código gerenciado ou, gera uma exceção. Sua única finalidade é ocupam espaço da tabela v que gera o tempo de execução para integração COM.

Métodos duplicados

Não é preciso definir métodos duplicados. Ou seja, você não deve chamar DefineMethod com um conjunto duplicado dos valores a td, wzName, e pvSig parâmetros. (Esses três parâmetros juntos definir o método exclusivamente.). No entanto, você pode usar um triplo duplicado desde que, para uma das definições de método, você conjunto o mdPrivateScope bit no dwMethodFlags parâmetro. (The mdPrivateScope bit significa que o compilador não emitirá uma referência a essa definição de método.)

Informações de implementação do método

Informações sobre a implementação do método geralmente não são conhecidas no momento em que o método é declarado. Portanto, não é necessário passar valores no ulCodeRVA e dwImplFlags parâmetros ao chamar DefineMethod. sistema autônomo valores podem ser fornecidos posteriormente por meio de IMetaDataEmit::SetMethodImplFlags or IMetaDataEmit::SetRVA, conforme apropriado.

Em algumas situações, sistema autônomo a invocação de plataforma (PInvoke) ou cenários de interoperabilidade COM, o corpo do método não será fornecido e ulCodeRVA deve ser definido sistema autônomo zero. Nessas situações, o método deve não ser marcado sistema autônomo abstrato, porque o tempo de execução localizará a implementação.

Definindo um método para PInvoke

Para cada função a ser chamado por meio de PInvoke não gerenciada, você deve definir um método gerenciado que representa a função de destino não gerenciado. Para conjunto o método gerenciado, use DefineMethod com alguns dos parâmetros definidos para certos valores, dependendo da forma em que PInvoke é usado:

  • True PInvoke - envolve a invocação de um método externo não gerenciado que reside em uma DLL não gerenciada.

  • Local PInvoke - envolve a invocação de um método nativo não gerenciado que está incorporado no módulo gerenciado corrente.

As configurações de parâmetro são determinadas na tabela a seguir.

Parâmetro

Valores de PInvoke true

Valores de PInvoke local

dwMethodFlags

conjunto mdStatic; desmarcar mdSynchronized e mdAbstract.

pvSigBlob

Válido comuns linguagem tempo de execução (CLR) assinatura de um método com parâmetros são válidos gerenciado tipos.

Uma assinatura de método válida do CLR com parâmetros são válido gerenciado tipos.

ulCodeRVA

0

dwImplFlags

conjunto miCil e miManaged.

conjunto miNative e miUnmanaged.

Requisitos

Plataformas: See Requisitos de sistema do .NET framework.

Cabeçalho: Cor.h

Biblioteca: Usado sistema autônomo um recurso em MSCorEE.dll

.NET Framework Versions: 3.5 SP1, 3,5, 3.0 SP1, 3.0, 2.0 SP1, 2.0, 1.1, 1.0

Consulte também

Referência

Interface IMetaDataEmit

Interface IMetaDataEmit2