|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Delphi,Описание процедуры |
|
Delphi - Delphi,Описание процедуры
|
Старожил Сообщения: 225 |
Профиль | Отправить PM | Цитировать Как описать процедуру, чтобы в ней были такие параметры, которые можно было бы не задавать при вызове данной процедуры или функции?
[s]Исправлено: Roman Go, 19:12 29-01-2003[/s] |
|
------- Отправлено: 19:08, 29-01-2003 |
Модер Сообщения: 1716
|
Профиль | Сайт | Отправить PM | Цитировать Crew
В случае int Dummy = DefaultDummyValue - да, она этого вообще не должна заметить. Подставляет правильный вызов компилятор, в функцию все равно уходит нужное количество параметров, просто не указанные руками заменяются на дефолтные значения. В случае __cdecl, как в твоем случае, имхо нереально. Но выход есть: передать первым параметром число последующих и описать функцию как __stdcall. |
------- Отправлено: 09:05, 23-02-2003 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 163
|
Профиль | Отправить PM | Цитировать Цитата:
Если не сложно в двух словах что это за __cdecl и чем __stdcall лучше в данном случае. А без указания точного количества параметров значит не получится , а жаль. |
|
------- Отправлено: 22:18, 23-02-2003 | #12 |
Монголо-татар Сообщения: 117
|
Профиль | Сайт | Отправить PM | Цитировать vasketsov
Crew я тогда чего-то не догоняю... получается что делфя не полностью совместима с винАпи? |
------- Отправлено: 09:04, 24-02-2003 | #13 |
Модер Сообщения: 1716
|
Профиль | Сайт | Отправить PM | Цитировать Crew
Способов передачи параметров много, более того, не все имеют названия. 1) Стек может очищаться как вызывающей функцией (__cdecl), так и вызываемой (_stdcall). Если функция вызывается часто, выгоднее, чтоб она сама очищала стек (почти весь WINAPI такой). Естественно, стек может очищать только та сторона, которая знает о размере переданных параметров. 2) Параметры могут передаваться в стеке в прямом и в обратном порядке. 3) Переметры могут передаваться не только через стек, но и через регистры (один и более, часто EAX или EAX/EDX). Сюда относится __fastcall и обычные паскалевские функции с небольшим числом стандартных аргументов. 4) Есть еще очень интересный способ передачи параметров, используемый при переходе в NT-системах в режим ядра. Все параметры передаются через один регистр, а именно, в него кладется указатель на первый параметр __stdcall-овской функции. Но без знания языка ассемблера такое самому руками, естественно, не написать, по крайней мере, мне не известен компилятор, понимающий такую модель вызова. На самом деле Delphi Compiler знает много методов вызовов, так что попробую про них почитать во встроенной справке. Ork Yason Цитата:
|
|
------- Отправлено: 11:52, 24-02-2003 | #14 |
Пользователь Сообщения: 53
|
Профиль | Отправить PM | Цитировать А ни как если не использовать
встроенный ASM. |
Отправлено: 00:04, 09-03-2003 | #15 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Сбой при удаленном вызове процедуры | Andrushind | Microsoft Windows NT/2000/2003 | 4 | 15-09-2013 18:38 | |
C/C++ - Перевод процедуры с Pascal на C++ | Snake750 | Программирование и базы данных | 56 | 05-04-2011 09:39 | |
Использование - Возврат процедуры активации Windows XP | Craager | Лицензирование продуктов Microsoft | 6 | 06-03-2009 15:22 | |
Вызов процедуры | ToX | Программирование и базы данных | 10 | 24-07-2004 00:11 |
|