استدعاء الاتفاقيات
عند إعلان إجراء أو وظيفة ، يمكنك استخدام أحد المؤشرات التالية للإشارة إلى اتفاقية الاتصال: التسجيل ، Pascal ، CDECL ، STDCALL ، و SAFECALL. على سبيل المثال،
وظيفة myFunction (x ، y: real): real ؛
...
تحدد اتفاقيات الاتصال الترتيب الذي يتم به تمرير المعلمات إلى الإجراءات ، كما أنها تؤثر أيضًا على استخدام السجلات عند حذف المعلمات من المكدس ، ومرور المعلمات ، والخطأ والتعامل مع الاستثناءات. اتفاقية الاتصال الافتراضية هي التسجيل.
• تسجيل المعلمات و Pascal Pass من اليسار إلى اليمين ، أي ، يتم حساب المعلمات في أقصى اليسار وتمريرها في أقرب وقت ، ويتم حساب المعلمات في أقصى اليمين ومرورها ؛
• بالإضافة إلى مكالمات CDECL والإجراءات والوظائف ، قم بإزالة المعلمات من المكدس قبل العودة ، بينما يستخدم CDECL ، عند إرجاع المكالمة ، يزيل المتصل المعلمات من المكدس ؛
• يمكن لمكالمات التسجيل تمرير المعلمات باستخدام ما يصل إلى 3 سجلات وحدة المعالجة المركزية ، بينما تستخدم جميع المكالمات الأخرى المكدس لتمرير المعلمات ؛
• تقوم مكالمة Safecall بتنفيذ استثناء "جدار الحماية" ، والذي ينفذ إشعار خطأ COM بين العمليات تحت Windows.
يلخص الجدول التالي اتفاقيات الاتصال:
------------------------------------------------- ------------------------------------------------
-كلمات ------------------------------------------- ------------------------------------------------- ------------------------------------------------- ------------------------------------------------- ------------------------------------------------- ---؟ |
-register --------------- من اليسار إلى اليمين --------- روتين ----------------- نعم --------------------- ||
-pascal --------------- من اليسار إلى اليمين --------- روتين ----------------- لا ----------------------- |
-CDECL ----------------- يمين اليسار --------- المتصل ------------------ --- لا ---------------------------- |
-stdcall ---------------- يمين اليسار ---------- روتين ---------------- --- لا ----------------------- |
-Safecall --------------- يمين اليسار ---------- روتين ----------------- --- لا ---------------------- |
------------------------------------------------- -------------------------------------------
تعتبر مكالمة التسجيل الافتراضية أكثر كفاءة لأنها تتجنب إنشاء إطار مكدس (يجب استخدام السجل عند الوصول إلى الخصائص المنشورة) ؛ ينصح stdcall و safecall. في Windows ، تستخدم API System STDCALL و SAFECALL ، في حين تستخدم أنظمة التشغيل الأخرى عادةً CDECL (لاحظ أن STDCALL أكثر كفاءة من CDECL).
يجب أن تستخدم الطرق التي تعلن عن واجهات مزدوجة Safecall ؛ لمزيد من المعلومات حول اتفاقية الاتصال ، راجع التحكم في البرنامج.
يتم استخدام المؤشرات القريبة ، والبعيدة ، والتصدير في برمجة النوافذ 16 بت ، وليس لها أي تأثير على برامج 32 بت ، ويتم الاحتفاظ بها للتوافق مع الوراء.