Главная страница
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.04 c
15-1413142327
xayam
2014-10-12 23:32
2015.09.10
Задача


15-1417728602
Юрий
2014-12-05 00:30
2015.09.10
С днем рождения ! 5 декабря 2014 пятница


15-1412001218
L_G
2014-09-29 18:33
2015.09.10
Многопоточное программирование: низкий старт


15-1411849802
Юрий
2014-09-28 00:30
2015.09.10
С днем рождения ! 28 сентября 2014 воскресенье


3-1304509903
fxPavel
2011-05-04 15:51
2015.09.10
расчет номера недели в FB через UDF