Re[2]: Что обозначают __cdecl, __fastcall, и __stdcall?
От: Кодт Россия  
Дата: 24.12.02 09:36
Оценка: 20 (4)
Здравствуйте, Atilla, Вы писали:

A>

Неточно!
; F(A,B,C,D)

_cdecl: ; прямой порядок расположения данных на стеке
        ; обратный по времени способ запихивания
        ; допускает переменное число параметров
        ; поскольку стек очищает тот, кто вызвал функцию
  push D
  push C
  push B
  push A
  call F
  ; ret
  inc esp, 16  ; очистка стека здесь

_stdcall: ; порядок данных - тот же самый
          ; но стек очищает функция
          ; поэтому число параметров фиксировано
  push D
  push C
  push B
  push A
  call F
  ; ret 16 ; очистка стека - в функции

_fastcall: ; аналогично stdcall, но два первых параметра передаются через регистры
  push D
  push C
  mov edx, B
  mov eax, A
  call F
  ; ret 8 ; очистка стека - в функции

_pascal: ; обратный порядок данных на стеке, прямой порядок запихивания
         ; поэтому число параметров фиксировано, и следовательно, стек очищает функция
  push A
  push B
  push C
  push D
  call F
  ; ret 16
http://files.rsdn.org/4783/catsmiley.gif Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.