07-11-2011, 10:41 PM
إقتباس :هل تظن ان stdcall هي السبب ؟لا أظن ذلك...
أعتقد أن الخطأ في اختيار طريقة التمرير الأحسن يسبب نتائج غير متوقعة أو خاطئة ولا يتسبب في الغالب في أخطاء...
أيضا التمرير بـ stdcall هو الأنسب في Win32 لأن الويندوز نفسه يستخدم هذا التمرير.
إقتباس :التى تدفع الى المكدس من اليسار الى اليمين .بالضبط! كذلك تدفع إلى المكدس، وهذا هو المتفق عليه
غير أن الإتيان بها (أي البحث عن القيم التي ستخزن في السجلات eax, ebx, ecx) ولا أقصد تخزينها، يكون حسب ما لاحظت من اليمين إلى اليسار
أي هنا:
كود :
DefaultCall(1, 2, 3, getOne, getTwo);لاحظ المثال:
PHP كود :
{$APPTYPE CONSOLE}
function getTwo: Integer;
begin Write('Two '); Result := 2; end;
function getOne: Integer;
begin Write('One '); Result := 1; end;
function getThree: Integer;
begin Write('Three '); Result := 3; end;
procedure RegisterCall(eax, ebc, ecx: Integer); register;
begin end;
begin
RegisterCall(getOne, getTwo, getThree);
Readln;
end.
كيف تفسر النتائج؟

