c# cdecl
و c __ stdcall
في P/استدعاء عملية التشغيل البيني بين C# و C ، غالبًا ما تكون وظائف C# تستخدم
اتفاقية الاتصال ، في حين أن وظائف C المقابلة تستخدم توقيع __ stdcall
ينبع هذا عدم التطابق من اختيار اتفاقية المكالمات التي استمرت تاريخيا حتى يومنا هذا.
__ stdcall : يقوم متصل دالة Windows بتنظيف
يرث من اتفاقية استدعاء Pascal 16 بت وهي اتفاقية الاتصال الافتراضية لوظائف Windows API و com. يحدد أن Callee (الوظيفة التي يتم استدعاؤها) تنظف المكدس بعد التنفيذ ، مما يجعله أكثر إحكاما في البيئات المقيدة للموارد. ومع ذلك ، إذا كان عدد المعلمات المتوقعة من قبل المتصل و Callee لا يتطابق ، فإن هذه الميزة تشكل خطر اختلال التوازن.
__ cdecl : Caller Cleaning of the Topable Parameter function
]]
هي اتفاقية استدعاء قياسية في C للوظائف ذات عدد متغير من المعلمات ، مثل تضع هذه الاتفاقية مسؤولية تنظيف المكدس على المتصل ، لأن المتصل يعرف عدد المعلمات التي تم تمريرها. نسيت تحديد
callingconvention.cdecl في
[dllimport] .
__ thiscall
: إخفاء هذا المؤشر لطريقة C
]
__ ThisCall
يشير بشكل خاص إلى C ، والذي يتولى مرور تمرير هذا
__ cdecl ، لكن .net p/invoke لا يدعمها معالج markalling وبالتالي فهو غير مناسب لرمز Pinvoke C.
تلخيص
إن التعايش مع
. يعد الفهم الصحيح لهذه الاتفاقيات ، وكذلك
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3