مشاركة عبر


أسلوب IMetaDataEmit::DefineMethod

قم بإنشاء تعريف لأسلوب أو دالة عمومي بالتوقيع المحدد وإرجاع إلى ken إلى تعريف الأسلوب هذا.

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

المعلمات

  • td
    [في] mdTypedefالرمز المميز الأصل فئة أو واجهة الأصل للأسلوب. قم بتعيين tdإلى mdTokenNil، إذا كنت تقوم بتعريف عمومي دالة.

  • szName
    [في] عضو الاسم في Unicode.

  • dwMethodFlags
    [في] CorMethodAttr القيمة قائمة تعداد التي تعين السمات الأسلوب أو دالة العمومية.

  • pvSigBlob
    [في] أسلوب توقيع. توقيع هو persهوted كما تم توفيره. إذا كنت بحاجة إلى تحديد معلومات إضافى لأية معلمات، استخدم من IMetaDataEmit::SetParamProps أسلوب.

  • cbSigBlob
    [في] عدد وحدات البايت في pvSigBlob.

  • ulCodeRVA
    [في] العنوان التعليمة البرمجية.

  • dwImplFlags
    [في] CorMethodImpl القيمة قائمة تعداد التي تحدد ميزات تنفيذ الأسلوب.

  • pmd
    [خارج] الرمز المميز للعضو.

ملاحظات

يضمن بيانات التعريف لواجهة برمجة تطبيقات أساليب persهوt بنفس الترتيب كما emits المتصل بها لفئة معينة مضمنة أو الواجهة، التي هو المعين في tdمعلمة.

مزيد من المعلومات حول استخدم من DefineMethodوإعدادات معينة للمعلمات هو الموفر أدناه.

فتحات في جدول الإصدار

وقت التشغيل باستخدام ملفات تعريف الأسلوب إلى إعداد فتحات v-جدول. في الحالات الموقع يلزم فتحات أو أكثر يتم تخطي، مثل للمحافظة على التماثل مع COM الواجهة التخطيط، وأسلوب وهمية هو ليشمل فتحه أو فتحات في v-الجدول؛ تعيين dwMethodFlags mdRTSpecialNameالقيمة CorMethodAttr بتعداد وحدد الاسم ك:

_VtblGap < من SequenceNumber>< _ من CountOfSlots >

الموقع من SequenceNumber هو رقم تسلسل للأسلوب و من CounإلىfSlots عدد الفتحات إلى تخطي في v-الجدول. إذا من CountOfSlots هو حذفها، 1 هو المفترضة. لا تكون هذه الطرق وهمية الاستدعاء من التعليمات البرمجية المدارة أو غير مدار أي محاولة إلى المكالمة إليها، من تعليمات برمجية مدارة أو غير مدارة، ينشئ استثناء. الغرض الوحيد هو تشغل مسافة في v-الجدول التي تنشئ وقت التشغيل من أجل التكامل COM.

وظائف مكررة

لا يجب أن تقوم بتعريف الأساليب المكررة. أن هو، يجب أن لا استدعاء DefineMethodمع التعيين مكرر من قيم في td، wzName، و pvSigمعلمات. (هذه المعلمات الثلاث معا تعرف بشكل فريد أسلوب.). على الرغم من ذلك، يمكنك استخدام ثلاث مرات متكررة بشرط أن، لأحد أسلوب ملفات تعريف، تقوم بتعيين mdPrivateScopeبت في dwMethodFlagsمعلمة. ( mdPrivateScopeيعني بت سوف لا الإرسال للمحول البرمجي مرجع إلى هذا أسلوب تعريف.)

معلومات تطبيق أسلوب

معلومات حول تنفيذ الأسلوب غالباً غير معروفة في وقت تم تعريف الأسلوب. Therefore, you do not need إلى pass قيم في the ulCodeRVA و dwImplFlags معلمات when calling DefineMethod. The قيم can be supplied later through IMetaDataEmit::SetMethodImplFlags أو IMetaDataEmit::SetRVA, كـ appropriate.

في some situations, such كـ النظام الأساسي invocation (PInvoke) أو توافق COM scenarios, the أسلوب النص الأساسي will not be supplied, و ulCodeRVA should be التعيين إلى zero. في these situations, the أسلوب should not be tagged كـ abstract, because the وقت التشغيل will بحث the implementation.

Defining a أسلوب for PInvoke

لكل مدارة الدالة إلى ليتم استدعاؤها من خلال PInvoke، يجب عليك تعريف أسلوب مدار الذي يمثل الدالة الهدف غير مدارة. لتعريف الطريقة التي تمت إدارتها، استخدم DefineMethodمع بعض المعلمات بتعيين إلى قيمة معينة، استناداً إلى الطريقة في أي PInvoke هو المستخدم:

  • القيمة صواب PInvoke-يتضمن الطلب لخارجيه غير مدارة أسلوب التي توجد في مكتبة الارتباط الديناميكي لم تتم إدارته.

  • تتضمن PInvoke المحلي-استدعاء أسلوب غير مدار الأصلي الذي هو المضمنة في وحدة نمطية? الحالي التي تمت إدارتها.

تعطي الإعدادات معلمة في الجدول التالي.

المعلمة

قيم PInvoke صحيحاً

قيم PInvoke محلي

dwMethodFlags

التعيينmdStatic; مسحmdSynchronizedوmdAbstract.

pvSigBlob

إدارة شائعة لغة وقت تشغيل (CLR) أسلوب توقيع صالح مع المعلمات الصحيحة أنواع.

توقيع أسلوب CLR صالح مع المعلمات الصحيحة مدارة الأنواع.

ulCodeRVA

0

dwImplFlags

التعيينmiCilوmiManaged.

التعيينmiNativeوmiUnmanaged.

المتطلبات

الأنظمة الأساسية: See متطلبات النظام إطار عمل .NET.

**Header:**Cor.h

المكتبة: Used كـ a مورد في MSCorEE.dll

.NET Framework Versions: 4, 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0, 1.1, 1.0

راجع أيضًا:

المرجع

واجهة IMetaDataEmit

واجهة IMetaDataEmit2