![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 22.09.2008
Сообщений: 214
|
![]()
Всем доброго времени суток. Покажите, пожалуйста, как описать процедуру с переменным числом параметров в паскале.
|
![]() |
![]() |
![]() |
#2 |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
![]()
Вроде, только если передавать массив параметров.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
![]() |
![]() |
![]() |
#3 |
Oldschool geek
Форумчанин
Регистрация: 09.03.2009
Сообщений: 611
|
![]()
В Delphi есть возможность сделать формальный параметр array of char, например, в функциях форматирования используется именно array of char. Но это выглядит не совсем как переменное число параметров. Список нужно заключать в квадратные скобки.
Можно объявить функциональный тип с соглашением о вызове cdecl и к нему дописать varargs;, в этом случае Delphi позволяет вызывать сишные varargs функции. Написать на чистом Паскале такую функцию не получится, зато можно определить cdecl функцию (без varargs), а дополнительные аргументы вытаскивать со стека. Потом на эту фукцию можно взять указатель и протайпкастить к функциональному типу и вызывать через переменную функционального типа. Ещё, может быть, получится импортировать и экспортировать под одним и тем же именем. Наконец, последний известный мне вариант — это через IDispatch. На Delphi реализуется интерфейс IDispatch, затем объект с этим интерфейсом тайпкастится к типу OLEVariant. Затем у этого OLEVariant можно вызывать всяческие методы со всяческими параметрами. Ещё можно сделать аналогичное решение, только без IDispatch. В Delphi есть какой–то встроенный способ делать аналогичные объекты, только типа Variant, и при этом использовать все типы, которые есть в Delphi, а не только в COM. Но я так не делал, так что не знаю. Я ради интереса реализовывал IDispatch, который пишет, как его вызывают. Вызываешь, допустим obj.asfdasf('sfsd', 34234, 'dfsd', True, 0); На консоль печатается obj.asfdasf('sfsd', 34234, 'dfsd', True, 0); вместо asfdasf можно написать что угодно и будет работать. Природа IDispatch такова, что он может вести себя как захочет. В частности, может вести себя так, как будто реализует методы со всеми возможными именами и типами. IDispatch — это, скажем так, дырка в полотне сильной типизации Delphi. UPD: В обычном Паскале ничего из этого нет. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[Pascal] Функции и процедуры(подпрограммы) | Рамик | Помощь студентам | 2 | 23.03.2009 17:00 |
Pascal-процедуры и функции | xxBOBAHxx | Помощь студентам | 3 | 18.11.2008 14:30 |
Pascal, цикл с заданным числом повторений | mondi | Помощь студентам | 8 | 13.11.2008 17:55 |
Процедуры (Pascal) | [Smarik] | Помощь студентам | 6 | 16.01.2008 14:52 |