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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.12.2014, 06:58   #11
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Странно, почему никто не вспомнил про array of const ? Литература
Пример использования (моё цы) :
Код:
function AoCSample(const Params1: array of const): Integer;
var
  I : Integer;
begin
  for i := Low(Params1) to High(Params1) do
  begin
    case TVarRec(Params1[i]).VType of
      vtObject:
        if Assigned(TVarRec(Params1[i]).VObject) then
          Foo(TVarRec(Params1[i]).VObject as TSmth)
      vtAnsiString: Foo(AnsiString(Params1[i].VAnsiString));
      vtInteger: Foo(Params1[i].VInteger); // not a pointer!
      vtExtended: Foo(Params1[i].VExtended^);
      vtVariant: Foo(Params1[i].VVariant^);
// you must manually implement whatever you need, otherwise - warn yourself
    else
      ShowMessage('parameter is not supported'); 
    end;
  end;
end;
Простые типы боксятся в вариант (если нужно их менять, ибо вариант через указатель, а простые типы - нет, а если менять не надо, можно и без боксинга).
Вызов:
Код:
var
  ar: array of TVarRec;
  Vr: Variant;
...
  SetLength(ar, 2);
  vr := True; // 100500, #13,  wsNormal
  ar[0].VType := vtVariant;
  ar[0].VVariant := @Vr;
  ar[1].VType := vtObject;
  ar[1].VObject := MySmth;
  AoCSample(ar);
// тут можно юзать изменённые данные из ar
или (менять опять же только через варианты-переменные или объекты )
Код:
AoCSample([1, True {значения, неизменны в принципе}, MySmth {объект, можно менять}, 
  myIntVariable {не изменится, ибо по значению}, 
  UnAssigned {вариант-значение, но если будет переменная, то можно изменить}]);
Надо ли говорить, что это очень сильное колдунство, моск сносит на раз, особенно при отладке. Не факт, что Вы подгоните под свою задачу.

Последний раз редактировалось phomm; 30.12.2014 в 07:05.
phomm вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив как параметр запроса sdsfy БД в Delphi 5 11.11.2011 04:46
массив как параметр функции makc101 Помощь студентам 2 19.04.2011 22:47
Массив как параметр функции MovsesIV Общие вопросы C/C++ 2 02.12.2010 03:07
C++ - массив как параметр функции kefir Помощь студентам 8 12.04.2010 17:48
Динамически массив как параметр ф-ии SNUPY Помощь студентам 2 11.05.2008 01:16