Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];

Вниз

Что такое 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.034 c
8-1090407440
Urvin
2004-07-21 14:57
2004.10.10
EMS


1-1095937631
XM-AD
2004-09-23 15:07
2004.10.10
Как завершить процес???


1-1095863606
DelphiLexx
2004-09-22 18:33
2004.10.10
Чему равна константа GWW_HINSTANCE


9-1086686588
Delpher_Gray
2004-06-08 13:23
2004.10.10
Обработко сообщений от мыши в консольной проге, D3D


14-1095919272
gn
2004-09-23 10:01
2004.10.10
Читайте назночение программ некоторые фразы меня впечатлили :-)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский