Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2009, 19:09   #1
Сергей089
Форумчанин
 
Регистрация: 22.09.2008
Сообщений: 214
По умолчанию Процедуры с переменным числом параметров Pascal

Всем доброго времени суток. Покажите, пожалуйста, как описать процедуру с переменным числом параметров в паскале.
Сергей089 вне форума Ответить с цитированием
Старый 04.04.2009, 19:20   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вроде, только если передавать массив параметров.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 04.04.2009, 19:47   #3
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 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: В обычном Паскале ничего из этого нет.
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[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