Aracılığıyla paylaş


IMetaDataEmit::DefineMethod Method

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.

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
);

Parameters

td [in] mdTypedef Yönteminin üst sınıfının veya üst arabiriminin belirteci. mdTokenNilGenel 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.

Remarks

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 arabirimi 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; dwMethodFlagsmdRTSpecialNameöğesini CorMethodAttr sabit listesi 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 yuva sayısıdır. CountOfSlots atlanırsa, 1 varsayılır. Bu sahte yöntemler yönetilen veya yönetilmeyen koddan çağrılamaz ve yönetilen veya yönetilmeyen koddan bunları çağırma girişimi bir ö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.

Duplicate Methods

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 parametrelerindeki ulCodeRVA değerleri geçirmeniz gerekmez. Değerler daha sonra IMetaDataEmit::SetMethodImplFlags veya IMetaDataEmit::SetRVA aracılığıyla uygun şekilde 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 gibi 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ış olarak 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öntemi çağırmayı içerir.

Parametre ayarları aşağıdaki tabloda verilmiştir.

Parameter True PInvoke için değerler Yerel PInvoke değerleri
dwMethodFlags Ayarla 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.

Requirements

Platform: Bkz. .NET tarafından desteklenen işletim sistemleri.

Header: Cor.h

Library: CorGuids.lib

See also