Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2015.09.10;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.053 c
15-1418765402
Юрий
2014-12-17 00:30
2015.09.10
С днем рождения ! 17 декабря 2014 среда


2-1394111347
Михаил
2014-03-06 17:09
2015.09.10
FireBird возврат результата запроса из ХП


2-1365077543
JohnKorsh
2013-04-04 16:12
2015.09.10
Иконка программы.


2-1392826517
dehkanin
2014-02-19 20:15
2015.09.10
Как записать в таблицу БД текст объёмом свыше 2-х мегабайт?


15-1413985851
Ламот
2014-10-22 17:50
2015.09.10
Как корректно скопировать /dev/mtd0 в образ и обратно (NAND)?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский