Método de 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] O mdTypedef token da classe pai ou na interface do pai do método. Definir 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 do método ou da função global.pvSigBlob
[in] A assinatura do método. A assinatura é mantida como fornecido. Se você precisar especificar informações adicionais para quaisquer parâmetros, 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
Os metadados API garante persistir os métodos na mesma ordem emite o chamador-los para uma determinada classe de delimitador ou interface, que é especificado na td parâmetro.
Informações adicionais sobre o uso de DefineMethod e configurações de determinado parâmetro é fornecido abaixo.
Slots na tabela de v
O runtime usa definições de método para configurar os slots de tabela v. No caso onde um ou mais slots precisam ser ignorados, tais como para preservar a paridade com o layout de interface COM um método fictício é definido para ocupar o slot ou slots na tabela v; definir o dwMethodFlags para o mdRTSpecialName valor o CorMethodAttr enumeração e especifique o nome como:
_ VtblGap <SequenceNumber>< _CountOfSlots>
onde SequenceNumber é o número de seqüência do método e CountOfSlots é o número de slots para ignorar a tabela de v. Se CountOfSlots é omitido, 1 será utilizado. Esses métodos fictícios não podem ser chamados a partir do código gerenciado ou e qualquer tentativa de chamá-los, a partir do código gerenciado ou, gera uma exceção. Sua única finalidade é a ocupar espaço v-tabela gerada pelo runtime para integração do COM.
Métodos duplicados
Você deve 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. (Estes três parâmetros juntos definir com exclusividade o método.). No entanto, você pode usar um triplo duplicado desde que, para uma das definições de método, você definir a mdPrivateScope bit na dwMethodFlags parâmetro. (O mdPrivateScope bits significa que o compilador não emitirá uma referência a esta definição de método.)
Informações de método de implementação
Informações sobre a implementação do método geralmente não são conhecidas no momento em que o método é declarado. Portanto, você não precisa passar valores a ulCodeRVA e dwImplFlags parâmetros ao chamar DefineMethod. Os valores podem ser fornecidos posteriormente por meio IMetaDataEmit::SetMethodImplFlags ou IMetaDataEmit::SetRVA, conforme apropriado.
Em algumas situações, como, por exemplo, 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 como zero. Nessas situações, o método deve não marcado como abstrato, porque o runtime irá localizar a implementação.
Definindo um método para PInvoke
Para cada função não gerenciada ser chamados por meio de PInvoke, você deve definir um método gerenciado que representa a função de destino não gerenciado. Para definir o método gerenciado, use DefineMethod com alguns dos parâmetros definidos para certos valores, dependendo da forma em que é usado o PInvoke:
Verdadeiro 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 atual.
As configurações de parâmetro são fornecidas na tabela a seguir.
Parâmetro |
Valores de PInvoke true |
Valores de PInvoke local |
---|---|---|
dwMethodFlags |
Set mdStatic; clear mdSynchronized and mdAbstract. |
|
pvSigBlob |
Válido common language runtime (CLR) assinatura de um método com parâmetros são válidos de tipos gerenciados. |
Uma assinatura de método válida do CLR com os parâmetros são válidos de tipos gerenciados. |
ulCodeRVA |
0 |
|
dwImplFlags |
Set miCil and miManaged. |
Set miNative and miUnmanaged. |
Requisitos
Plataformas: Consulte Requisitos de sistema do .NET Framework.
Cabeçalho: Cor.h
Biblioteca: Usado como um recurso em mscoree
.NET Framework versões: 4, 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0, 1.1, 1.0