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. mdTokenNilGenel 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 pvSigBlobbayt 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; dwMethodFlagsmdRTSpecialNamedeğ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 tdyinelenen bir değer kümesiyle çağırmamalısınızDefineMethod. wzNamepvSig (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 DefineMethodve 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 miManagedayarlayınmiCil. ve'i miUnmanagedayarlayı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

Ayrıca bkz.