Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.49 MB
Время: 0.033 c
14-1095859478
ODINUS
2004-09-22 17:24
2004.10.10
Помогите


10-1045125852
alexfed
2003-02-13 11:44
2004.10.10
provider not exported : midas + socket connection


14-1095674525
}|{yk
2004-09-20 14:02
2004.10.10
Ничего себе ошибка!


1-1095766297
denis24
2004-09-21 15:31
2004.10.10
хранение строк


14-1095917397
pavel_guzhanov
2004-09-23 09:29
2004.10.10
Ассемблер




   Наверх