Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Что такое stdcall и с чем его едят? [D7, WinXP]


Страницы:   1 2

Чувак ©   (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]

А поконкретнее можно?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо