Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
4-1094391990
Command
2004-09-05 17:46
2004.10.10
Стиль XP


1-1095798519
][ncognito
2004-09-22 00:28
2004.10.10
New()


14-1095765710
Layner
2004-09-21 15:21
2004.10.10
Прошу помочь по ценам на такую программу! (распределенный склад)


14-1095325756
}|{yk
2004-09-16 13:09
2004.10.10
Слова - табу, или как спровоцировать собеседника


14-1095827979
borrris
2004-09-22 08:39
2004.10.10
Замучал сосед