Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Как выполнить метод по его имени

Delphi , Компоненты и Классы , RTTI

Как выполнить метод по его имени

Автор: Sasan Adami
WEB-сайт: http://www.lmc-mediaagentur.de

{ ... }
type
  PYourMethod = ^TYourMethod;
  TYourMethod = procedure(S: string) of object;

procedure TMainForm.Button1Click(Sender: TObject);
begin
  ExecMethodByName('SomeMethod');
end;

procedure TMainForm.ExecMethodByName(AName: string);
var
  PAddr: PYourMethod;
  M: TMethod;
begin
  PAddr := MethodAddress(AName);
  if PAddr <> nil then
  begin
    M.Code := PAddr;
    M.Data := Self;
    TYourMethod(M)('hello');
  end;
end;

procedure TMainForm.SomeMethod(S: string);
begin
  ShowMessage(S);
end;

Перевод:

Код на Delphi демонстрирует выполнение метода по его имени с помощью процедуры ExecMethodByName.

Обзор кода:

  1. Определены типы PYourMethod и TYourMethod как указатель и тип метода, соответственно.
  2. В обработчике события Button1Click формы TMainForm вызывается процедура ExecMethodByName с именем 'SomeMethod'.
  3. Процедура ExecMethodByName принимает имя метода в виде строки параметра (AName) и использует его для поиска соответствующего метода в текущем объекте (Self). Это делается вызовом MethodAddress(AName), который возвращает указатель на метод, если он существует.
  4. Если метод найден, процедура создает экземпляр типа TMethod (запись, представляющая вызов метода), присваивает адрес метода полю Code и присваивает текущий объект (Self) полю Data.
  5. Наконец, процедура вызывает метод с помощью указателя на метод TYourMethod, передавая 'hello' в качестве аргумента.

Результатом является всплывающее окно, отображающее строку 'hello'.

Альтернативное решение заключается в использовании функций FindClassMethod или GetMethodAddress, предоставляемых RTL (Runtime Library) Delphi. Эти функции более просты и легче для чтения, чем ручной расчет адреса памяти, используемый в этом коде.

Пример использования FindClassMethod:

procedure TMainForm.ExecMethodByName(AName: string);
var
  M: TMethod;
begin
  M := FindClassMethod(TypeInfo(TYourForm), AName);
  if Assigned(M) then
    TYourMethod(M)('hello');
end;

В этом коде используется FindClassMethod для поиска метода в классе TYourForm с именем, указанным в параметре AName. Если метод найден, он вызывается с помощью тех же техник, что и раньше.

В статье описано, как выполнить метод в Delphi по его имени, используя функцию MethodAddress и вызов процедуры с помощью оператора TMethod.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: RTTI ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100

Время компиляции файла: 2024-05-10 07:13:18
2024-05-19 17:07:48/0.01040506362915/2