ملاحظات التعلم برمجة الواجهة تحت دلفي (الأصلي)
الكاتب:Eve Cole
وقت التحديث:2025-02-21 19:48:02
|
| واجهة البرمجة ملاحظات التعلم تحت دلفي |
|
| 1.1 لماذا تستخدم الواجهة؟ على سبيل المثال: هناك خدمة مبيعات التذاكر ، يمكن للدورات السينما بيع التذاكر ، ويمكن لبيوت الأوبرا بيع التذاكر ، ويمكن أيضًا بيع تذاكر التذاكر. خدمات مبيعات التذاكر؟ يجب أن تعلم أنه حتى المديرين يمكنهم بيع التذاكر ، والتي من الواضح أنها غير مناسبة لإدراج المديرين في هيكل الميراث لخدمات مبيعات التذاكر. لذلك ، فإن خدمة بيع التذاكر هي واجهة. 1.2 كيفية استخدام واجهات في دلفي | | 1.2.1 Interface ImyInterface = interface (IIInterface) // التعليمات (1) ['{63e072df-b81e- 4734 -b3cb- 3c23c7fda8ea } ' ] ؛وظيفة _Release: integer ؛ نهاية ؛ التفسير (1): إذا كانت هناك علاقة مستمرة ، املأ الواجهة الأصل بين قوسين ، وإلا ، حفظها ، مثل: imyInterface = واجهة. ملاحظة (2): هذا GUID اختياري. وقت التشغيل ، مثل تعريف طريقة الواجهة. ملاحظة (3): يجب أن تنفذ الواجهة هذه الوظائف الثلاث. 1.2.2 يتم تنفيذ خدمات واجهة واجهة الواجهة بواسطة الفئات. tintfclass = class (toopject ، imyinterface) privatefcounter: integer ؛ frefcount: integer ؛ publicfunction QueryInterface ( على سبيل المثال: var aintf: imyInterface ؛ beginaObj: = tintfclass.create ؛ tryaintf: = (imyInterface (AOBJ) ؛ ... b. استخدم الآلية المدمجة لمرجم دلفي. على سبيل المثال: AINTF: = AOBJ.C. استخدم طريقة QueryInterface. يجب تحديد الواجهة بشكل صريح من iinterface وراثي الواجهة. سوف تقوم Delphi بفحص الواجهة نفسها إذا لم يتم إصدار رمز الإصدار بعد الاستخدام ، ولكن هذا يسبب مشاكل ، مثل الكود التالي: INTEGER ؛ = tintfclass . تم تعيين NIL على الواجهة ، وسيقوم Freeandnil (AOBJ) بإطلاق AINTF مرة أخرى ، وقد تم إصدار الكائن عندما يكون AINTF NIL ، تحتاج فقط إلى تقليل عدد المرجعية دون إطلاق. تفويض كائن الفئة ينفذ الواجهة: timplclass = class (tooject ، iimplinterface) frefcount الخاص: integer ؛ وظيفة عامة converttousd (const intd: integer): double ؛ ابدأ إذا كان GetInterface (IID ، OBJ) ثم النتيجة: = 0 النتيجة: = e_nointerface ؛ النهاية ؛ وظيفة timplclass._release: integer ؛ الآن هناك TintfServicLass فئة لتنفيذ واجهة iimplinterface ، لا توجد حاجة لإعادة تعريفها. مع كائن فئة ، تدمير الحمل ؛ تفويض مع كائن. النهاية ؛ التنفيذ يلي: مُنشئ TintfServicLass. . يتم تعريف مؤشر GOG للواجهة في إزاحة VMT -72 في الواجهة و rttidelphi: vmtintfable = -72. الوظيفة ذات الصلة: GetInterFaceCount ؛ GetInterFacetable ؛ البنية ذات الصلة: tinterfaceentry = recordiid المعبأة: tguid ؛ vtable: pointer ؛ ioffset: integer ؛ inseger: integer ؛ end ؛ pinterfacetable = ^tinterfacetable ؛ tinterfacetable = enterfaceentry ؛ الذات هو مؤشر إلى مؤشر VMT ، لذلك: Self.getInterFacetable.EntryCount يعادل: aptr: = ppointer (integeer ((المؤشر (الذات)^) + vmtintftable)^؛ تعليمات في الإعلان ، يمكن إضافة معلومات RTTI إلى البرنامج الذي تم تجميعه في Delphi ، مثل: {$ M+} iinvokable = interface (iiinterface) {$ m-} يتم تعريف معلومات RTTI للواجهة بواسطة tintfmetadata structure: tintfmetadata = recordname: string ؛ معلومات الواجهة: ptypeinfo ؛ // المؤشر الذي يصف معلومات الواجهة ANCINFO: ptypeinfo ؛ // مؤشر يصف معلومات الوالدين العدد: // يتم تعريف عدد الطرق الموروثة من نهاية الواجهة الأصل ؛ ، CCPascal ، CCSTDCALL ، CCSAFECALL) ؛ ptypeinfo ؛ // صف مؤشر المعلومات للطريقة التي يعزفها selfinfo: ptypeinfo ؛ // مؤشر المعلومات الذي يصف الطريقة نفسها المعاملات: tintfparamentryarray نهاية قيمة معلومات RTTI ؛ تنسيق الوقوف نهاية معلومات النوع ؛ |
|