Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/22: Рейтинг темы: голосов - 22, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 3

Получить адрес метода в классе через экземпляр класса

15.10.2011, 10:03. Показов 4427. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте знатоки! Прошу помощи. Переношу один проэкт с скриптового языка питон на обжпаскаль и вот упёрся рогом в получение адреса у метода в классе.
Пробовал и так и эдак всё никак не выходит, пишет
[DCC Error] Project4.dpr(23): E2036 Variable required
Привожу упрощённый пример ибо кода очень много.

Вот код программы:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
program Project4;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
type
  TSimple = class
  public
    procedure Proc1;
  end;
 
procedure TSimple.Proc1;
begin
  writeln('Hello!');
end;
 
var simple: TSimple;
    addr_proc1: Pointer;
 
begin
  simple := TSimple.Create;
  addr_proc1 := @simple.Proc1;
 
end.
Если addr_proc1 := @simple.Proc1; заменить на addr_proc1 := @TSimple.Proc1; то оно компилит, но тогда я получаю непонятно какой адресс, а мне нужна конкретно ссылка на метод у экземпляра "simple". Цель - запомнить адрес и вызвать этот метод в дальнейшем в другой части программы.

Добавлено через 10 часов 18 минут
Проблему решил другим способом, через процедурный тип "procedure of object", но всё же интересно как получить адрес метода у экземпляра класса.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.10.2011, 10:03
Ответы с готовыми решениями:

Запуск метода класса через кнопку
Ужасно стыдно, но я имею очень небольшое представление о работе классов. Да и вообще о Делфи. Для полного представления задание:...

Как получить айпи адрес из 2ip.ru через delphi 7
Помогите пожалуйста мучиюсь найти не могу помощь очень нужна программу решил вот создать получение айпи адреса чтобы не надо было заходить...

Создать экземпляр класса Graphics для метода в своём классе
Всем привет.Делаю графический редактор,нужно,чтобы отрисовывались на контроле picturebox линии из списка lines.Для этого создал класс...

3
 Аватар для pHOMM
480 / 253 / 51
Регистрация: 30.06.2010
Сообщений: 651
15.10.2011, 12:58
Емпип, у экземпляра класса нет методов, у него есть ссылка на класс, в котором эти методы находятся, он для вызова этих методов передает ещё себя (self) чтобы метод работал над данными конкретно вот этого экземпляра (полями там, или ещё чем), и метод класса как раз и отличается тем, что он принимает ещё и ссылку на экземпляр - поэтому-то и нужно всегда писать "procedure of object", чтобы ссылка была не простой 4байтной а 8-байтной, со ссылками и на метод и на экземпляр
0
 Аватар для Alex_pac
1302 / 708 / 107
Регистрация: 25.05.2011
Сообщений: 2,158
Записей в блоге: 51
15.10.2011, 13:15
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
program Project1;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
type
  TSimple = class
  public
    procedure Proc1;
    procedure Proc2(txt: string);
  end;
 
{ TSimple }
 
procedure TSimple.Proc1;
begin
  writeln('Hello!');
end;
 
procedure TSimple.Proc2(txt: string);
begin
  writeln(txt);
end;
 
var
    addr_proc1: procedure of object;
    addr_proc2: procedure(txt: string) of object;
    simple: TSimple;
 
begin
  { TODO -oUser -cConsole Main : Insert code here }
  simple := TSimple.Create;
  addr_proc1 := simple.Proc1;
  addr_proc2 := simple.Proc2;
 
  addr_proc1;
  addr_proc1;
  addr_proc1;
  addr_proc1;
  addr_proc2('world');
  addr_proc2('begin');
 
  readln;
 
end.
1
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 3
15.10.2011, 13:41  [ТС]
Большое спасибо за объяснение и пример, теперь полная ясность
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.10.2011, 13:41
Помогаю со студенческими работами здесь

Получить адрес не статического метода класса
Можно ли получить адресс не статического метода класса (статического можно - пробовал).

Краш приложения при вызове метода из другого класса через экземпляр
Привет Хочу вызвать метод из другого класса. Для это создаю экземпляр этого класса через конструктор с параметрами и вызываю метод через...

Создать экземпляр метода класса или доступ к методу из экземпляра класса
Всем доброго времени суток!) Уже месяца как 2 не сишарпил и подзабыл...собственно задача такая: Создать отдельный экземпляр класса для...

Экземпляр класса как входные данные метода другого класса
Можно ли в качестве входных данных метода передать экземпляр метода другого класса? Если да, то как?

Экземпляр класса ребенка в классе родителя
Здравствуйте, прошу помощи в организации приложения, так как в ООП относительно зеленый. Есть у меня некий спорт плагин, который выводит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru