Главная страница
    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.05 c
15-1416228660
jack128
2014-11-17 15:51
2015.09.10
У кого есть Delphi > XE4, проверьте багу


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


2-1394026817
Дмитрий
2014-03-05 17:40
2015.09.10
Общий тип для манипуляции несовместимыми типами с общими свойств.


15-1421303608
ПЛОВ
2015-01-15 09:33
2015.09.10
Запрос к БД, но данные не нужны :)


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





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский