Текущий архив: 2004.10.10;
Скачать: CL | DM;
Вниз
Что такое stdcall и с чем его едят? Найти похожие ветки
← →
Чувак (2004-09-19 14:53) [0]Сабж
← →
Sergey_Masloff (2004-09-19 15:13) [1]соглашение о передаче параметров при вызове подпрограмм.
← →
Чувак (2004-09-19 15:17) [2]А поконкретнее можно?
← →
Poirot © (2004-09-19 15:43) [3]MSDN forever
← →
Anatoly Podgoretsky © (2004-09-19 15:54) [4]Calling conventions
← →
Виньдовьсь 95 © (2004-09-19 16:15) [5]в книге написано что если юзать stdcall то подпрограммы написанные в dll на delphi можно использовать в других языках.
← →
jack128 © (2004-09-19 16:24) [6]Виньдовьсь 95 © (19.09.04 16:15) [5]
необязательно stdcall
← →
Sergey_Masloff (2004-09-19 16:28) [7]Виньдовьсь 95 © (19.09.04 16:15) [5]
На сарае написано слово из 3 букв но в нем лежат дрова. Подпрограммы написаные на чем угодно можно вызывать на чем угодно если у них соглашения о вызове одинаковые. Уж там stdcall или cdecl или еще что это уже все равно.
← →
Sergey_Masloff (2004-09-19 16:31) [8]Вообще же в ответе [4] содержится ссылка на исчерпывающий ответ.
← →
Anatoly Podgoretsky © (2004-09-19 16:39) [9]Виньдовьсь 95 © (19.09.04 16:15) [5]
Неправда это!
← →
akvilon © (2004-09-19 23:59) [10]это значит что параметры в функцию передаются через стек (задом наперед, т.е. первый кладется в стек последним), а функция сама должна освободить стек от этих параметров (выровнять стек)
← →
Palladin © (2004-09-20 02:53) [11]
> akvilon © (19.09.04 23:59)
А поподробней?
← →
TUser © (2004-09-20 09:22) [12]
> А поподробней?
Процедура/функция - это кусок кода и туда можно передавать параметры. В подавляющем большинстве случаев, параметр - это кусок информации. Эти куски можно передать по-разному, например через регистр (register,fastcall) или через стек (stdcall). Важен также порядок передаваемых параметров. Необходимо, чтобы параметры передавались так же, как они принимаются в подпрограмме. Для этого придуманы все эти соглашения. В Delphi по-умолчанию параметры передаются через регистры, что есть быстро. Но в других языках может быть как угодно.
Если требуется совместимость между разными языками, то об. используют stdcall.
← →
PVOzerski © (2004-09-20 10:46) [13]Особенно с учетом того, что в Win32 соглашения stdcall приняты в стандартных API-функциях.
← →
Sergey_Masloff (2004-09-21 06:31) [14]TUser © (20.09.04 09:22) [12]
>В подавляющем большинстве случаев, параметр - это кусок информации.
А в остальных случаях?
>Эти куски можно передать по-разному, например через регистр
>(register,fastcall) или через стек (stdcall).
Неправда. Вернее, не совсем правда. Как ты передашь через регистры десять параметров? Да и параметры не всякоготипа через регистр передашь. Поэтому register ПЫТАЕТСЯ передать первые несколько параметров через регистры а в остальном действует через сткек.
Соглашения о вызовах действительно различаются порядком передачи параметров - справа налево или наоборот слева направо, то есть на вершине стека оказывается или самый первый или последний параметр, а также тем кто - вызывающая или вызываемая процедура восстанавливает стек после вызова выталкивая из него ранее записаные параметры.
← →
Palladin © (2004-09-21 18:55) [15]Вот :) Это уже поподробней... еще нужно рассказать поподробней что такое регистр, чем register отличается от fastcall и почему обычно используют stdcall...
там может еще поподробней понадобится чего нибудь...
← →
jack128 © (2004-09-21 19:16) [16]Palladin © (21.09.04 18:55) [15]
и почему обычно используют stdcall...
А действительно почему?? Вроде как register быстрее, так почему MS решила stdcall использовать??
← →
Palladin © (2004-09-21 19:20) [17]stdcall, ибо windows на C, а в C ибо для того чтоб в функцию можно передать немеряно параметров...
← →
Palladin © (2004-09-21 19:21) [18]точнее их разное количество...
← →
jack128 © (2004-09-21 19:22) [19]Palladin © (21.09.04 19:20) [17]
в C ибо для того чтоб в функцию можно передать немеряно параметров...
А в register нельзя передать "немеряно" параметров??
зы а разве страндарное соглашение в С не cdecl ??
← →
Palladin © (2004-09-21 19:24) [20]тада незнаю... всегда так считал... чиста домыслы... не сишник я...
← →
jack128 © (2004-09-21 19:29) [21]Palladin © (21.09.04 19:21) [18]
То есть имеется в виду функции типа printf(char *, ...) , я так понимаю?? помоему это особенность cdecl, тут ключевую роль играет кто очищает стек(вызывающий код или сама функция) Но это тож домослы..
Palladin © (21.09.04 19:24) [20]
не сишник я...
Я тоже -)
Страницы: 1 вся ветка
Текущий архив: 2004.10.10;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.039 c