IMetaDataEmit::D efineMethod, metod
Skapar en definition för en metod eller global funktion med den angivna signaturen och returnerar en token till den metoddefinitionen.
Syntax
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
);
Parametrar
td
[in] Token mdTypedef
för den överordnade klassen eller det överordnade gränssnittet för metoden. Ange td
till mdTokenNil
om du definierar en global funktion.
szName
[in] Medlemsnamnet i Unicode.
dwMethodFlags
[in] Ett värde för CorMethodAttr-uppräkningen som anger attributen för metoden eller den globala funktionen.
pvSigBlob
[in] Metodsignaturen. Signaturen sparas enligt angiven. Om du behöver ange ytterligare information för några parametrar använder du metoden IMetaDataEmit::SetParamProps .
cbSigBlob
[in] Antalet byte i pvSigBlob
.
ulCodeRVA
[in] Kodens adress.
dwImplFlags
[in] Ett värde för CorMethodImpl-uppräkningen som anger implementeringsfunktionerna för metoden.
pmd
[ut] Medlemstoken.
Kommentarer
Metadata-API:et garanterar att bevara metoder i samma ordning som anroparen genererar dem för en viss omslutande klass eller ett visst gränssnitt, som anges i parametern td
.
Ytterligare information om användningen av DefineMethod
och särskilda parameterinställningar finns nedan.
Platser i V-tabellen
Körningen använder metoddefinitioner för att konfigurera v-table-platser. Om en eller flera platser måste hoppas över, till exempel för att bevara paritet med en COM-gränssnittslayout, definieras en dummy-metod för att ta upp platsen eller platserna i v-tabellen. dwMethodFlags
ange värdet för mdRTSpecialName
CorMethodAttr-uppräkningen och ange namnet som:
<_VtblGapSequenceNumber><_CountOfSlots>
där SequenceNumber är sekvensnumret för metoden och CountOfSlots är antalet platser att hoppa över i v-tabellen. Om CountOfSlots utelämnas antas 1. Dessa dummy-metoder kan inte anropas från antingen hanterad eller ohanterad kod och alla försök att anropa dem, från antingen hanterad eller ohanterad kod, genererar ett undantag. Deras enda syfte är att ta upp utrymme i den v-tabell som körningen genererar för COM-integrering.
Duplicerade metoder
Du bör inte definiera dubblettmetoder. Du bör alltså inte anropa DefineMethod
med en duplicerad uppsättning värden i parametrarna td
, wzName
och pvSig
. (Dessa tre parametrar definierar tillsammans metoden unikt.). Du kan dock använda en dubblett trippel förutsatt att du anger biten mdPrivateScope
i parametern dwMethodFlags
för en av metoddefinitionerna. (Biten mdPrivateScope
innebär att kompilatorn inte genererar en referens till den här metoddefinitionen.)
Information om metodimplementering
Information om metodimplementeringen är ofta inte känd när metoden deklareras. Därför behöver du inte skicka värden i parametrarna ulCodeRVA
och dwImplFlags
när du anropar DefineMethod
. Värdena kan anges senare via IMetaDataEmit::SetMethodImplFlags eller IMetaDataEmit::SetRVA efter behov.
I vissa situationer, till exempel plattformsanrop (PInvoke) eller COM-interop-scenarier, kommer metodtexten inte att anges och ulCodeRVA
bör anges till noll. I dessa situationer bör metoden inte taggas som abstrakt, eftersom körningen kommer att hitta implementeringen.
Definiera en metod för PInvoke
För att varje ohanterad funktion ska anropas via PInvoke måste du definiera en hanterad metod som representerar den ohanterade målfunktionen. För att definiera den hanterade metoden använder DefineMethod
du med några av parametrarna inställda på vissa värden, beroende på hur PInvoke används:
True PInvoke – innebär anrop av en extern ohanterad metod som finns i en ohanterad DLL.
Lokal PInvoke – omfattar anrop av en intern ohanterad metod som är inbäddad i den aktuella hanterade modulen.
Parameterinställningarna anges i följande tabell.
Parameter | Värden för true PInvoke | Värden för lokal PInvoke |
---|---|---|
dwMethodFlags |
Ange mdStatic ; clear mdSynchronized och mdAbstract . |
|
pvSigBlob |
En giltig CLR-metodsignatur (Common Language Runtime) med parametrar som är giltiga hanterade typer. | En giltig CLR-metodsignatur med parametrar som är giltiga hanterade typer. |
ulCodeRVA |
0 | |
dwImplFlags |
Ange miCil och miManaged . |
Ange miNative och miUnmanaged . |
Krav
Plattformar: Se Systemkrav.
Huvudet: Cor.h
Bibliotek: Används som en resurs i MSCorEE.dll
.NET Framework versioner: Tillgänglig sedan 1.0