_cdecl
_fastcall
_stdcall
لماذا وأين تستخدم كل واحدة؟؟
_cdecl
_fastcall
_stdcall
لماذا وأين تستخدم كل واحدة؟؟
دولة الخلافة الاسلامية في المخاض الاخير وميلادها قريب
حزب التحرير : التزم الطريق الصحيح الشرعي الوحيد لاعادة دولة الخلافة الاسلامية .
الامة الاسلامية متعطشة لقيادة مخلصة لتذوق حلاوة النصر ولن يكون ذلك الا بعودة الخلافة الاسلامية
الامة الاسلامية تحتاج لاحداث تسحقها سحقا وتمعسها معسا لتفكر تفكيرا جماعيا بالتغير لان وحدة المشاعر لوحدها لاتكفي وهذة الاحداث كلها خير
كلها طرق مختلفة لإستدعاء الدوال
في __cdecl
1- إسم الداله يسبقه (_) أو underscore
مثال sum ==> _sum
2- يتم تمرير الparameters من اليمين إلى اليسار
3- يتم إرجاع النتيجة في AL/AX/EAX
أما بالنسبة ل__stdcall فهي خاصة بميكروسوفت
و تشبه __cdecl تماما بإختلاف كيفية تسمية الدالة
فيتم إتباعها ب@ متبوعا بعدد البايتات التي يتم تمريرها للداله
مثال
تتحول إلى
أما بالنسبة ل__fastcall
فيتم تمرير أول parameter في AL/AX/EAX على حسب حجمه
و يتم تمرير ثاني parameter في DL/DX/EDX على حسب حجمه أيضا
بينما يتم تمرير الباقي (إن وجد) عن طريق الstack من اليمين إلى اليسار أيضا
و يتم إرجاع قيمة الداله في AL/AX/EAX
إسم الداله يتحول بنفس الطريقة السابقه في __stdcall
اقتباسأما بالنسبة ل__fastcallفيتم تمرير أول Parameter في AL/AX/EAX على حسب حجمه
و يتم تمرير ثاني Parameter في DL/DX/EDX على حسب حجمه أيضا
في مترجم مايكروسوفت :
ECX->EDX->Stack_right2left
في مترجم بورلاند :
EAX->ECX->EDX->Stack_left2right
في مترجم GCC : مثل مايكروسوفت .
يتم زيادة @ قبل اسم الروتين و @ بعد الاسم + عدد البارامترات .
في cdecl يكون الروتين غير مسؤول عن تصحيح مؤشر المكدس Stack قبل العودة للـCaller بينما في الطريقتين الثانيتين يكون الروتين هو المسؤول عن تصحيح مؤشر المكدس .
هناك انواع اخرى ايضا غير هذه .
تم تعديل هذه المشاركة بواسطة GamingMasteR في 2 فبراير 2009 في 20:37
mov eax, dword ptr ds:[0xffdf0308]
jmp dword ptr [eax+0xfc]
مشكورين جدا اخواني الكرام
بالنسبة للإختيار الإفتراضي هو cdecl
ولكن لماذا يجب تعريف دالة WinMain كـ stdcall
??
دولة الخلافة الاسلامية في المخاض الاخير وميلادها قريب
حزب التحرير : التزم الطريق الصحيح الشرعي الوحيد لاعادة دولة الخلافة الاسلامية .
الامة الاسلامية متعطشة لقيادة مخلصة لتذوق حلاوة النصر ولن يكون ذلك الا بعودة الخلافة الاسلامية
الامة الاسلامية تحتاج لاحداث تسحقها سحقا وتمعسها معسا لتفكر تفكيرا جماعيا بالتغير لان وحدة المشاعر لوحدها لاتكفي وهذة الاحداث كلها خير
فعلا يا Gaming Master عندك حق مع إنها مش حتفرق كتير قوي :D
شكلي قريتها من مصدر غلط من غير ما أجربها ...
اقتباسيتم زيادة @ قبل اسم الروتين و @ بعد الاسم + عدد البارامترات
عدد البارامترات ولا حجمهم؟؟
دولة الخلافة الاسلامية في المخاض الاخير وميلادها قريب
حزب التحرير : التزم الطريق الصحيح الشرعي الوحيد لاعادة دولة الخلافة الاسلامية .
الامة الاسلامية متعطشة لقيادة مخلصة لتذوق حلاوة النصر ولن يكون ذلك الا بعودة الخلافة الاسلامية
الامة الاسلامية تحتاج لاحداث تسحقها سحقا وتمعسها معسا لتفكر تفكيرا جماعيا بالتغير لان وحدة المشاعر لوحدها لاتكفي وهذة الاحداث كلها خير
اقتباسأسأل مايكروسوفت .
هل هذا الفعل مضارع ولا أمر؟؟
دولة الخلافة الاسلامية في المخاض الاخير وميلادها قريب
حزب التحرير : التزم الطريق الصحيح الشرعي الوحيد لاعادة دولة الخلافة الاسلامية .
الامة الاسلامية متعطشة لقيادة مخلصة لتذوق حلاوة النصر ولن يكون ذلك الا بعودة الخلافة الاسلامية
الامة الاسلامية تحتاج لاحداث تسحقها سحقا وتمعسها معسا لتفكر تفكيرا جماعيا بالتغير لان وحدة المشاعر لوحدها لاتكفي وهذة الاحداث كلها خير
اقتباسأمر , انت اخذتها بجد ولا ايه ؟
والله فكرتك بتحكي جد :lol: :lol: :lol:
دولة الخلافة الاسلامية في المخاض الاخير وميلادها قريب
حزب التحرير : التزم الطريق الصحيح الشرعي الوحيد لاعادة دولة الخلافة الاسلامية .
الامة الاسلامية متعطشة لقيادة مخلصة لتذوق حلاوة النصر ولن يكون ذلك الا بعودة الخلافة الاسلامية
الامة الاسلامية تحتاج لاحداث تسحقها سحقا وتمعسها معسا لتفكر تفكيرا جماعيا بالتغير لان وحدة المشاعر لوحدها لاتكفي وهذة الاحداث كلها خير
لكن السؤال متى استخدمها ؟
استخدمها فقط عندما أريد تصدير الدالة إلى ملف dll .. ولا أعرف لماذا أقوم بهذا ؟
تطبيق طمأنينة ، نسخة بيتا على أندرويد
عبدالله الشمّري - Al-Shammari
twitter @abshammeri
abshammeri AT gmail.com
github : abshammeri
أخي الشمري يمكنك تصدير دوال تحت اي اسلوب من الثلاثة السابقة , لكن المهم ان لا يكون هناك conflict بين اسلوب الـCaller و الـCallee .
mov eax, dword ptr ds:[0xffdf0308]
jmp dword ptr [eax+0xfc]
أعتقد إن __cdecl هو الإفتراضي إن لم يستخدم أي معرف, ولكن البعض يضعها لمجرد زيادة الـ portability.
ما يهم في حالة الـ DLL هي import و export.
قد اكون مخطئاً بالكامل :D
شكرا للرد والمعلومة,
أعدت النظر في مشروعي , لم أستخدم أي أسلوب , فقط import و export سادة :-) ... خصوصا أن العمل غالبا على مترجم واحد .
تم تعديل هذه المشاركة بواسطة الشمري في 3 فبراير 2009 في 21:37
تطبيق طمأنينة ، نسخة بيتا على أندرويد
عبدالله الشمّري - Al-Shammari
twitter @abshammeri
abshammeri AT gmail.com
github : abshammeri