Здравствуйте, Atilla, Вы писали:
A>
A>__cdecl — отсутствие декорации имен. Применять в том случае, если в C++ используешь функцию, которую написали на C или наоборот, на С++ пишешь функцию для C.
A>__fastcall — передача части параметров и результата не через стек, а через регистры. Для оптимизации применяется.
A>__stdcall — оно же PASCAL — противоположный C-шному договор о передаче параметров в функцию и о том, кто после выполнения функции чистит стек. Применяется в Win API.
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