IMetaDataEmit::DefineMethod Yöntemi
Belirtilen imzaya sahip bir yöntem veya genel işlev için bir tanım oluşturur ve bu yöntem tanımına bir belirteç döndürür.
Sözdizimi
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
);
Parametreler
td
[in] mdTypedef
Yönteminin üst sınıfının veya üst arabiriminin belirteci. mdTokenNil
Genel bir işlev tanımlıyorsanız olarak ayarlayıntd
.
szName
[in] Unicode'da üye adı.
dwMethodFlags
[in] Yöntemin veya genel işlevin özniteliklerini belirten CorMethodAttr sabit listesi değeri.
pvSigBlob
[in] Yöntem imzası. İmza, sağlanan şekilde kalıcı hale gelir. Herhangi bir parametre için ek bilgi belirtmeniz gerekiyorsa , IMetaDataEmit::SetParamProps yöntemini kullanın.
cbSigBlob
[in] içindeki pvSigBlob
bayt sayısı.
ulCodeRVA
[in] Kodun adresi.
dwImplFlags
[in] Yönteminin uygulama özelliklerini belirten CorMethodImpl sabit listesinin değeri.
pmd
[out] Üye belirteci.
Açıklamalar
Meta veri API'si, yöntemleri çağıranın parametrede belirtilen belirli bir kapsayan sınıf veya arabirim için yaydığı sırada kalıcı hale getirmek için td
garanti eder.
ve belirli parametre ayarlarının DefineMethod
kullanımıyla ilgili ek bilgiler aşağıda verilmiştir.
V tablosundaki yuvalar
Çalışma zamanı, v-tablo yuvalarını ayarlamak için yöntem tanımlarını kullanır. COM arabirim düzeniyle eşliği korumak gibi bir veya daha fazla yuvanın atlanması gerektiğinde, v tablosundaki yuvayı veya yuvaları almak için sahte bir yöntem tanımlanır; dwMethodFlags
mdRTSpecialName
değerini CorMethodAttr numaralandırmasının değerine ayarlayın ve adı şu şekilde belirtin:
<_VtblGapSequenceNumber><_CountOfSlots>
Burada SequenceNumber yöntemin sıra numarasıdır ve CountOfSlots , v tablosunda atlanacak yuvaların sayısıdır. CountOfSlots atlanırsa, 1 varsayılır. Bu kukla yöntemler, yönetilen veya yönetilmeyen koddan çağrılamaz ve yönetilen veya yönetilmeyen koddan çağırma girişimleri özel durum oluşturur. Tek amaçları, çalışma zamanının COM tümleştirmesi için oluşturduğu v tablosunda yer kaplamaktır.
Yinelenen Yöntemler
Yinelenen yöntemler tanımlamamalısınız. Başka bir ifadeyle, , ve parametrelerinde td
yinelenen bir değer kümesiyle çağırmamalısınızDefineMethod
. wzName
pvSig
(Bu üç parametre birlikte yöntemini benzersiz olarak tanımlar.). Ancak, yöntem tanımlarından biri için biti parametresinde dwMethodFlags
ayarlamanız mdPrivateScope
koşuluyla yinelenen üçlü kullanabilirsiniz. (Bit, mdPrivateScope
derleyicinin bu yöntem tanımına başvuru göndermeyeceği anlamına gelir.)
Yöntem Uygulama Bilgileri
Yöntem uygulaması hakkındaki bilgiler genellikle yöntem bildirildiğinde bilinmez. Bu nedenle, çağrılırken DefineMethod
ve dwImplFlags
parametrelerinde ulCodeRVA
değerleri geçirmeniz gerekmez. Değerler daha sonra uygun şekilde IMetaDataEmit::SetMethodImplFlags veya IMetaDataEmit::SetRVA aracılığıyla sağlanabilir.
Platform çağırma (PInvoke) veya COM birlikte çalışma senaryoları gibi bazı durumlarda, yöntem gövdesi sağlanmaz ve ulCodeRVA
sıfır olarak ayarlanmalıdır. Bu durumlarda çalışma zamanı uygulamayı bulacağından yöntemi soyut olarak etiketlenmemelidir.
PInvoke için Yöntem Tanımlama
Yönetilmeyen her işlevin PInvoke aracılığıyla çağrılması için hedef yönetilmeyen işlevi temsil eden bir yönetilen yöntem tanımlamanız gerekir. Yönetilen yöntemi tanımlamak için, PInvoke'un kullanılma şekline bağlı olarak bazı parametreler belirli değerlere ayarlanmış şekilde kullanın DefineMethod
:
True PInvoke - Yönetilmeyen DLL'de bulunan bir dış yönetilmeyen yöntemin çağrılması içerir.
Yerel PInvoke - geçerli yönetilen modüle eklenmiş yerel yönetilmeyen bir yöntemin çağrılması içerir.
Parametre ayarları aşağıdaki tabloda verilmiştir.
Parametre | True PInvoke için değerler | Yerel PInvoke değerleri |
---|---|---|
dwMethodFlags |
Set mdStatic ; clear mdSynchronized ve mdAbstract . |
|
pvSigBlob |
Geçerli yönetilen türler olan parametrelerle geçerli bir ortak dil çalışma zamanı (CLR) yöntemi imzası. | Geçerli yönetilen türler olan parametrelerle geçerli bir CLR yöntemi imzası. |
ulCodeRVA |
0 | |
dwImplFlags |
ve'i miManaged ayarlayınmiCil . |
ve'i miUnmanaged ayarlayınmiNative . |
Gereksinimler
Platform: Bkz. Sistem Gereksinimleri.
Üstbilgi: Cor.h
Kitaplığı: MSCorEE.dll'de kaynak olarak kullanılır
.NET Framework Sürümleri: 1.0 sürümünden itibaren kullanılabilir