powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Получение адреса overload метода
25 сообщений из 49, страница 1 из 2
Получение адреса overload метода
    #39536487
Доброго времени суток.
Получение адреса метода делается обычно так - @TStringStream.Create. Но мне нужно получить адрес этого же метода, но с параметром @TStringStream.Create(const AString: string) (это понятное дело не работает). Как его тогда получить?
p.s. TStringStream взят для примера.
...
Рейтинг: 0 / 0
Получение адреса overload метода
    #39536514
Freedoom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тоже в теме, возможно поможет следующий код
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
function GetAddrConstructor: pointer;
label
  L_Exit;
begin
  asm
               mov     eax, @AddrCall.Pointer     // адрес команды
               sub     eax, 4                     // адрес смещения функции УТОЧНИТЬ В ОТЛАДЧИКЕ (ОКНО ASSWMBLER)
               mov     eax, [eax]                 // адрес конструктора
               jmp     L_Exit                     // выход
  @AddrCall:
               dd      L_Exit
  end;
  TStringStream.Create('');
L_Exit:
end;
...
Рейтинг: 0 / 0
Получение адреса overload метода
    #39536565
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь предлагают вариант решения.

А зачем это нужно? Какая исходная задача?
...
Рейтинг: 0 / 0
Получение адреса overload метода
    #39536890
Спасибо за варианты.
Делаю встроенный компилятор, что-то вроде PaxCompiler, но на много проще, более узконаправленный.
...
Рейтинг: 0 / 0
Получение адреса overload метода
    #39536957
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тоже в теме,

И тебе понадобилась такими ярыстными средствами сделать вызов ? Или чего???


Используй RTTI почти (Если не всё) можно им управлять.


Вот к примеру я когда то привязал к PHP 7.1 полное управление с GUI

[youtube=
YouTube Video
...
Рейтинг: 0 / 0
Получение адреса overload метода
    #39537045
Для использования RTTI нужно в классах делать "видимыми" поля, методы, свойства и другое, что не входит в видимость published. Мне проще прописать несколько нужных методов с адресами вызова.
p.s. за видео спасибо.
...
Рейтинг: 0 / 0
Получение адреса overload метода
    #39537073
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тоже в теме,

RTTI работает со всеми секциями почти, кроме private. Кстати, published не может содержать overload а значит вы используете public
...
Рейтинг: 0 / 0
Получение адреса overload метода
    #39537094
Freedoom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Няшик, блажен кто верует
...
Рейтинг: 0 / 0
Получение адреса overload метода
    #39537098
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Freedoom,

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

Нормальный RTTI появился в Delphi 2010. Всё что было в прошлых средах - жалкие мало функциональные, жалкие функции. Лишь для малых нужд.
...
Рейтинг: 0 / 0
Получение адреса overload метода
    #39537099
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
оффтопным * сообщением
...
Рейтинг: 0 / 0
Получение адреса overload метода
    #39537100
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И во первых - использование кеугена это не воровство приложение.

Это значит - что я нашёл ключик под ковриком, и зашёл к себе (в чужой дом. Что бы его использовать пока в хозяева на отдыхе)

Это не значит что я собираюсь себе что - то прикарманить.
...
Рейтинг: 0 / 0
Получение адреса overload метода
    #39537108
Freedoom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Няшик Кстати, published не может содержать overload а значит вы используете public
На части снимка экрана показал откомпилированный код с перекрываемой процедурой (procedure Test; virtual) в разделе published
Няшик Всё что было в прошлых средах - жалкие мало функциональные, жалкие функции. Лишь для малых нужд.
Тем не менее это не мешало ни Borland ни последующим разработчикам Delphi, так же как и большинству разработчикам
...
Рейтинг: 0 / 0
Получение адреса overload метода
    #39537109
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НяшикКстати, published не может содержать overload а значит вы используете public

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    procedure Test; overload;
  published
    procedure Test(const S: string); overload;
  end;



Может.
...
Рейтинг: 0 / 0
Получение адреса overload метода
    #39537111
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лошарик,

ты по вечерам напиваешься, что ли.
...
Рейтинг: 0 / 0
Получение адреса overload метода
    #39537113
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД,

Я про сам published

E2266 Only one of a set of overloaded methods can be published
...
Рейтинг: 0 / 0
Получение адреса overload метода
    #39537114
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няшик...Only one of a set of overloaded methods can be publishedНяшик...published не может содержать overload а значит вы используете publicТы не видишь разницы?
...
Рейтинг: 0 / 0
Получение адреса overload метода
    #39537115
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НяшикчччД,

Я про сам published

E2266 Only one of a set of overloaded methods can be published

Я даже надеюсь, ты знаешь, почему.
...
Рейтинг: 0 / 0
Получение адреса overload метода
    #39537116
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДНяшик...Only one of a set of overloaded methods can be publishedНяшик...published не может содержать overload а значит вы используете publicТы не видишь разницы?

Блин.. Реально ошибся в высказываниях. Имелось введу больше двух. Это всё усталость после6 работы.


В общем, с published RTTI в токио отлично работает.



Class
Код: pascal
1.
2.
3.
4.
5.
type
  TestClass = class
  published
    function TestFunc(a: Integer; f: TestClass): string; overload;
  end;



Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
program Project1;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils, rtti, Test;

var
  с: TRttiContext;

begin
  Writeln(с.FindType('Test.TestClass').GetMethod('TestFunc').ToString);
  Readln;

end.



Выведет function TestFunc(a: Integer; f: TestClass): string
...
Рейтинг: 0 / 0
Получение адреса overload метода
    #39537120
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имхо, для разрешения "проблемы" с адресами overload методов могли бы ввести вспомогательный синтаксис, с указанием типов параметров, как в сях, что-то вроде:

Код: pascal
1.
2.
3.
4.
5.
6.
procedure  P; overload;
procedure  P(aInt : integer); overload;
...
begin
... :=  @P; // Метод без параметров
... :=  @P(integer); // С параметром типа integer


Но это был бы уже дедушка, если бы такое было.
...
Рейтинг: 0 / 0
Получение адреса overload метода
    #39537141
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДдля разрешения "проблемы" с адресами overload методов могли бы ввести вспомогательный синтаксис
Ни к чему это баловство, всё решается переменной процедурного типа:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
procedure test; overload;
begin
end;

procedure test(a:string); overload;
begin
end;

var

 proc : procedure(a:string);

begin
 proc := @test;
end.
...
Рейтинг: 0 / 0
Получение адреса overload метода
    #39537142
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Код: pascal
1.
2.
3.
begin
 proc := test;
end
...
Рейтинг: 0 / 0
Получение адреса overload метода
    #39537145
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

:0) D2007
Код: pascal
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.
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

procedure test; overload;
begin
  writeln('test()');
end;

procedure test(a:string); overload;
begin
  writeln('test(string)');
end;

var
 proc : procedure;
 procS : procedure(a:string);

begin
  proc := @test;
  procS := @test;

  proc;
  procS('aaa');

  readln;
end.

...
Рейтинг: 0 / 0
Получение адреса overload метода
    #39537146
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...а если поменять местами порядок объявления процедур test; и test(a:string), то получаем AV.

Ибо в D2007 для данного случая - "кто первый встал - того и тапки".

Возможно, в новых D's ситуация изменилась.
...
Рейтинг: 0 / 0
Получение адреса overload метода
    #39537147
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДИбо в D2007 для данного случая - "кто первый встал - того и тапки
Оно так не только в 2007. Просто нужно убрать взятие адреса .
...
Рейтинг: 0 / 0
Получение адреса overload метода
    #39537149
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

ТС желает адрес, в один прием. :)
...
Рейтинг: 0 / 0
25 сообщений из 49, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Получение адреса overload метода
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]