Що таке stdcall і з чим його їдять

в книзі написано що якщо юзати stdcall то підпрограми написані в dll на delphi можна використовувати в інших мовах.

це означає що параметри в функцію передаються через стек (задом наперед, тобто перший кладеться в стек останнім), а функція сама повинна звільнити стек від цих параметрів (вирівняти стек)


> А більш детально?

Процедура / функція - це шматок коду і туди можна передавати параметри. У переважній більшості випадків, параметр - це шматок інформації. Ці шматки можна передати по-різному, наприклад через регістр (register, fastcall) або через стек (stdcall). Важливий також порядок переданих параметрів. Необхідно, щоб параметри передавалися так само, як вони приймаються в підпрограмі. Для цього придумані всі ці угоди. У Delphi за замовчуванням параметри передаються через регістри, що є швидко. Але в інших мовах може бути як завгодно.
Якщо потрібно сумісність між різними мовами, то об. використовують stdcall.

Особливо з урахуванням того, що в Win32 угоди stdcall прийняті в стандартних API-функції.

> Ці шматки можна передати по-різному, наприклад через регістр
> (Register, fastcall) або через стек (stdcall).
Неправда. Вірніше, не зовсім правда. Як ти передаси через регістри десять параметрів? Та й відповідних установок всякоготіпа через регістр передаси. Тому register НАМАГАЄТЬСЯ передати перші кілька параметрів через регістри а в іншому діє через сткек.

# XA0; Угоди про виклики дійсно розрізняються порядком передачі параметрів - справа наліво або навпаки зліва направо, тобто на вершині стека виявляється або найперший або останній параметр, а також тим хто - що викликає або викликається процедура відновлює стек після виклику виштовхуючи з нього раніше записані параметри.

Ось :) Це вже більш детально. ще потрібно розповісти детальніше що таке регістр, ніж register відрізняється від fastcall і чому зазвичай використовують stdcall.

там може ще більш детально знадобиться чого небудь.

stdcall, бо windows на C, а в C бо для того щоб в функцію можна передати неміряно параметрів.

точніше їх різну кількість.

тада незнаю. завжди так вважав. чиста домисли. НЕ сішнік я.