Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

использование указателей на методы [D7, WinXP]


Arm79 ©   (2006-04-15 13:29:00) 

Уважаемые мастера.

Пытаюсь создать оболочку для "безопасного" исполнения методов некоторjго типа.

type
 TSomeMethod = function: boolean of Object;

function Auto(const SM: TSomeMethod ): boolean;
begin  
 Result := False;
 try
   Result := SM();
 except
   on E: Exception
   do begin
     ...
   end;
 end;
end;

Так работает.

А как вызывать таким образом функцию с параметрами?
То есть типа
procedure Proc1;
begin
  if Auto(Form.SomeMethod(Params, Values))
  then begin
   .....
  end;
end;


TUser   (2006-04-16 05:52:00) [1]


> Это dynamic arrays а не open. Лень шарится по справке, вот
> но такой код позволит передать любой тип данных:

Скажи это авторам справки по open arrays :)


Джо   (2006-04-15 18:03:00) [2]

> [5] tesseract ©   (15.04.06 17:38)
>
> > function Find(A: array of Char): Integer;
>
> Это dynamic arrays а не open.

Нет, это именно open.


tesseract   (2006-04-15 17:38:00) [3]


> function Find(A: array of Char): Integer;

Это dynamic arrays а не open. Лень шарится по справке, вот но такой код позволит передать любой тип данных:

function Find(A: array of Const): Integer;

либо

function Find(A: array of TvarRec): Integer;

что в приципе ондо и тоже


TUser   (2006-04-15 17:35:00) [4]

Open array parameters allow arrays of different sizes to be passed to the same procedure or function. To define a routine with an open array parameter, use the syntax array of type (rather than array[X..Y] of type) in the parameter declaration. For example,

function Find(A: array of Char): Integer;

declares a function called Find that takes a character array of any size and returns an integer.


tesseract   (2006-04-15 17:32:00) [5]


> Если число параметров может варьировать - то надо использовать
> open arrays. Про их использование написано в справке. Если
> также и тип параметров может различаться - через Variant
> надо разруливать.

а что open arrays чуствительны к типу данных?


Arm79   (2006-04-15 17:23:00) [6]

Спасибо, я как то и не сообразил.


TUser   (2006-04-15 15:11:00) [7]

type
TSomeMethod = function (A: integer): boolean of Object;

function Auto(const SM: TSomeMethod; A: integer): boolean;
begin  
Result := False;
try
  Result := SM(A);
except
  on E: Exception
  do begin
    ...
  end;
end;
end;

Если число параметров может варьировать - то надо использовать open arrays. Про их использование написано в справке. Если также и тип параметров может различаться - через Variant надо разруливать.


Наверх

Титульная страница Поиск, карта сайта Написать письмо