Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Получение адреса overload метода / 25 сообщений из 49, страница 1 из 2
15.10.2017, 15:50:43
    #39536487
Получение адреса overload метода
Доброго времени суток.
Получение адреса метода делается обычно так - @TStringStream.Create. Но мне нужно получить адрес этого же метода, но с параметром @TStringStream.Create(const AString: string) (это понятное дело не работает). Как его тогда получить?
p.s. TStringStream взят для примера.
...
Рейтинг: 0 / 0
15.10.2017, 16:46:53
    #39536514
Freedoom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение адреса overload метода
Тоже в теме, возможно поможет следующий код
Код: 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
15.10.2017, 20:10:17
    #39536565
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение адреса overload метода
Здесь предлагают вариант решения.

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

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


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


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

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

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

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

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

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

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

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

Я про сам published

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

Я про сам published

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

Я даже надеюсь, ты знаешь, почему.
...
Рейтинг: 0 / 0
16.10.2017, 22:06:49
    #39537116
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение адреса overload метода
чччДНяшик...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
16.10.2017, 22:11:26
    #39537120
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение адреса overload метода
Имхо, для разрешения "проблемы" с адресами overload методов могли бы ввести вспомогательный синтаксис, с указанием типов параметров, как в сях, что-то вроде:

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


Но это был бы уже дедушка, если бы такое было.
...
Рейтинг: 0 / 0
17.10.2017, 00:16:47
    #39537141
Kazantsev Alexey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение адреса overload метода
чччДдля разрешения "проблемы" с адресами 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
17.10.2017, 00:22:57
    #39537142
Kazantsev Alexey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение адреса overload метода
...
Код: pascal
1.
2.
3.
begin
 proc := test;
end
...
Рейтинг: 0 / 0
17.10.2017, 00:36:21
    #39537145
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение адреса overload метода
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
17.10.2017, 00:41:04
    #39537146
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение адреса overload метода
...а если поменять местами порядок объявления процедур test; и test(a:string), то получаем AV.

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

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

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


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