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