Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2015.09.10;
Скачать: CL | DM;

Вниз

Еще немного по ассемблеру   Найти похожие ветки 

 
dmk ©   (2014-11-07 02:35) [0]

Как из функции на ассемблере вызвать overload функцию? Возможно ли это?


 
Германн ©   (2014-11-07 02:57) [1]


> dmk ©   (07.11.14 02:35)
>
> Как из функции на ассемблере вызвать overload функцию? Возможно
> ли это?

Что такое функция на ассемблере? И что ты подразумеваешь под вызовом Overload функции?
Ассемблер - это совсем другой уровень. Он ничего не знает про всякие там ООП.
Встроенный в Дельфи ассеммлер это уже нечто другое, но только благодаря встроенной поддержке ассемблера в компиляторе Дельфи.


 
Inovet ©   (2014-11-07 07:37) [2]

Не, но вызвать, тем не менее, можно всё что угодно. У функций всё равно генерируются уникальные имена. Это если речь про нормальный (не встроенныей в Делфи) ассемблер.


 
MBo ©   (2014-11-07 08:02) [3]

В общем, человеческого способа нет, overload - магия компилятора, и для вызова нужно получит адрес нужной функции, кухня чего скрыта (простое взятие адреса вернет адрес первой функции).
Вот метод, который был предложен в этом форуме GuAV:

function A(i: Integer): Integer; overload;
begin
  Result := i + 1;
end;

function A(i, j: Integer): Integer; overload;
begin
  Result := i + j;
end;

procedure TForm1.Button4Click(Sender: TObject);
const
  A1: function(i:Integer):Integer = A;
  A2: function(i, j:Integer):Integer = A;
var
 r1, r2: Integer;
begin
asm
 mov eax, 3
 call A1
 mov r1, eax

 mov eax, 3
 mov edx, 4
 call A2
 mov r2, eax
end;
 Caption := Format("%d %d", [r1, r2]);
end;


 
brother ©   (2014-11-07 08:12) [4]

> const
>  A1: function(i:Integer):Integer = A;
>  A2: function(i, j:Integer):Integer = A;

это я не понял, где об этом почитать и для каких версий делфи?


 
MBo ©   (2014-11-07 08:26) [5]

Если вопрос о константах, то это typed Constants, в данном случае функционального типа.
Существуют они давно, но возможно, не всегда их можно было делать локальными.
Есть еще опция компилятора Assignable typed Constants {$J+}, позволяющая их изменять.

Если вопрос о функциональном типе - то это было ещё в Турбо Паскале.


 
dmk ©   (2014-11-07 10:58) [6]

Спасибо! Видимо overload просто надстройка со скрытым механизмом. Сделал разные названия функциям.


 
MBo ©   (2014-11-07 11:35) [7]

>Сделал разные названия функциям.
И правильно. Ни к чему из-за небольшого синтаксического сахара геморрой обретать


 
Rouse_ ©   (2014-11-07 22:59) [8]

Есть человеческий способ, но вариант от GuAV гораздо проще, в противном случае придется много обвеса реализовать, поверх функционала, практически своя VMT выйдет.



Страницы: 1 вся ветка

Текущий архив: 2015.09.10;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.044 c
15-1415217828
Jeer
2014-11-05 23:03
2015.09.10
С днем военного разведчика!


2-1394436419
alexdn
2014-03-10 11:26
2015.09.10
Закрытие формы


2-1395399726
Александр_2012
2014-03-21 15:02
2015.09.10
откат изменений в БД


11-1259909126
MTsv DN
2009-12-04 09:45
2015.09.10
Работа с меню...


2-1395039984
Васька
2014-03-17 11:06
2015.09.10
автоподбор высоты ячейки в Excel