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