وظائف رد الاتصال واستخداماتها
1 نظرة عامة على وظائف رد الاتصال
وظيفة رد الاتصال هي آلية يقوم فيها المتصل بتمرير بعض المعلمات إلى الكائن عند تهيئة كائن (يشير الكائن هنا إلى كائنات في OOP، والوظائف العامة، وما إلى ذلك)، وفي نفس الوقت يقوم بتمرير وظيفة يمكن للمتصل الوصول إليها يتم تمرير العنوان إلى الكائن. هذه الوظيفة عبارة عن اتفاقية إعلام بين المتصل والمستدعى عند وقوع الحدث المتفق عليه، سيقوم المستدعى (عادةً ما يتضمن سلسلة عمل) باستدعاء الوظيفة وفقًا لعنوان وظيفة رد الاتصال.
بهذه الطريقة، يكون المتصل في موضوع واحد والمتصل به في موضوع آخر. الرسالة: يمكن اعتبار الرسالة أيضًا شكلاً من أشكال رد الاتصال، لأن الرسالة يتم تمريرها أيضًا من قبل المتصل إلى المستدعي أثناء التهيئة، حيث يرسل المستدعي رسالة إلى المتصل عند وقوع الحدث المتفق عليه.
بهذه الطريقة، يكون المتصل في الخيط الرئيسي ويكون المستدعي في الخيط الرئيسي أو الخيط العامل. نموذج حدث دلفي:
هناك العديد من المكونات المرئية في VCL الخاصة بـ Delphi والتي تستخدم نماذج الأحداث، مثل حدث OnCreate الخاص بـ TForm. المبدأ هو: تحديد وظيفة الحدث في وقت التصميم، وعندما يتم تشغيل الحدث في وقت التشغيل، سيتم استدعاء وظيفة الحدث المحددة في وقت التصميم. . ميكانيكيًا، نموذج حدث دلفي هو نفس نموذج رد الاتصال. ومع ذلك، هناك بعض الاختلافات في النماذج المحددة. وظيفة رد الاتصال النقية تكون في شكل دالة عامة، بينما يكون حدث دلفي في شكل طريقة كائن، أي أنه يمكن تعريف نوع وظيفة رد الاتصال التالية: النوع TCallBackFunc = PROcedure (pData: المؤشر) للكائن؛
2 تعليمات لاستخدام وظائف رد الاتصال
يتم استخدام وظيفة رد الاتصال بشكل أساسي في حالتين. الأول هو أن بعض واجهات برمجة تطبيقات Windows تتطلب وظيفة رد الاتصال كعنوان المعلمة الخاصة بها، والآخر هو أن الوظيفة التي يحددها المستخدم في مناسبة معينة تتطلب وظيفة رد الاتصال كعنوان المعلمة الخاصة بها ، للوظائف المعرفة من قبل المستخدم، يتم استخدامه بشكل عام عند استدعاء الوظائف في مكتبات الارتباط الديناميكي. هناك عدة خطوات رئيسية لاستخدام وظيفة رد الاتصال: 1. لا يختلف تحديد نوع وظيفة رد الاتصال عن تعريف عملية الوظيفة العامة، ولكن يجب أن يلبي تعريفها متطلبات وظيفة وظيفة رد الاتصال حسب الحاجة، والفرق الوحيد هو ذلك في تعريف الوظيفة أو الإجراء، يجب أن يتبعه إعلان بأنه استدعاء قياسي لنظام Windows، على سبيل المثال: typeTHDFunction= function(I:integer;s:string):stdcall; THDProcedure=procedure(s:string); stdcall;2. ثم حدد الوظيفة أو العملية المقابلة بناءً على هذا النموذج الأولي. لا توجد متطلبات لاسم هذه الوظيفة أو العملية، ويجب أن يكون نوع معلمات الوظيفة ونوع القيمة المرجعة متسقين تمامًا مع رد الاتصال المحدد بالنسبة للإجراءات، يجب أن يكون نفس نوع المعلمة فقط. مثال: تحديد الوظيفة المقابلة والعملية المقابلة بناءً على النموذج الأولي للوظيفة والعملية المذكورة أعلاه. تعريف النموذج الأولي للوظيفة: Function HdFunExample(k:integer,sExam:string):stdcall; تعريف العملية: الإجراء HdProExample(sExam:string);stdcall; 3. تنفيذ وظيفة رد الاتصال أو الإجراء في البرنامج؛ integer,sExam:string):integer stdcall;BeginEnd;procedure HdProExample(sExam:string);stdcall;beginend; 4. يتم استخدام وظيفة رد الاتصال بشكل عام كعنوان إدخال لوظيفة معينة في النظام وفقًا للنموذج الأولي لوظيفة الاتصال: افترض أن هناك الاتصال التالي الوظيفة: دالة DyHdFunExample(HdFun:THDFunction;I: عدد صحيح):boolean ملاحظة: في وظيفة الاستدعاء، يمكن استدعاء وظيفة رد الاتصال مباشرة عن طريق معالجة مؤشر الوظيفة (أي أن المعلمة في وظيفة الاستدعاء هي معلمة نوع وظيفة رد الاتصال، ويتم تشغيلها مباشرة)، بحيث تنفذ وظيفة رد الاتصال عمليات معينة. أي أن وظيفة رد الاتصال يتم تنفيذها في وظيفة الاتصال. استدعاء: varI:integer;beginI:=DyHdFunExample(@HdFunExample,i);//…….End;
3 أمثلة
يوجد نموذج البرنامج ضمن الدليل H:/callback function example/. يكمن استخدام وظائف رد الاتصال بشكل أساسي في وظائف واجهة برمجة التطبيقات الأصلية لنظام التشغيل Windows، ولكن وظائف الاتصال المعرفة من قبل المستخدم توجد بشكل عام في مكتبات الارتباط الديناميكي. بشكل عام، ليست هناك حاجة لاستخدام وظائف رد الاتصال في نفس المشروع. (فكر شخصياً)...