Вверх ↑
Ответов: 1841
Рейтинг: 369
#1: 2015-06-12 14:59:18 ЛС | профиль | цитата
flint2 писал(а):
Я имел ввиду, что вызов кода компонента происходит через ассемблерную команду CALL, что код компонента прописан только один раз, а не как сейчас.

        91 [1]        int res = m_cgt->sdkGetCount(SDK);
0x6e8c232a  <+0x00b8>        a1 44 30 8d 6e           mov    0x6e8d3044,%eax
0x6e8c232f  <+0x00bd>        8b 10                    mov    (%eax),%edx
0x6e8c2331  <+0x00bf>        8b 45 08                 mov    0x8(%ebp),%eax
0x6e8c2334  <+0x00c2>        89 04 24                 mov    %eax,(%esp)
0x6e8c2337  <+0x00c5>        ff d2                    call   *%edx
0x6e8c2339  <+0x00c7>        83 ec 04                 sub    $0x4,%esp
0x6e8c233c  <+0x00ca>        89 45 f4                 mov    %eax,-0xc(%ebp)
или вот
        102 [1]        id_element res = m_cgt->sdkGetElement(SDK, Index);
0x6e8c24c7  <+0x00b8>        a1 44 30 8d 6e           mov    0x6e8d3044,%eax
0x6e8c24cc  <+0x00bd>        8b 50 04                 mov    0x4(%eax),%edx
0x6e8c24cf  <+0x00c0>        8b 45 0c                 mov    0xc(%ebp),%eax
0x6e8c24d2  <+0x00c3>        89 44 24 04              mov    %eax,0x4(%esp)
0x6e8c24d6  <+0x00c7>        8b 45 08                 mov    0x8(%ebp),%eax
0x6e8c24d9  <+0x00ca>        89 04 24                 mov    %eax,(%esp)
0x6e8c24dc  <+0x00cd>        ff d2                    call   *%edx
0x6e8c24de  <+0x00cf>        83 ec 08                 sub    $0x8,%esp
0x6e8c24e1  <+0x00d2>        89 45 f4                 mov    %eax,-0xc(%ebp)

flint2 писал(а):
код компонента прописан только один раз, а не как сейчас.

Тут как такового, нет кода компонента.
Есть среда с API (callback).
Ты получаешь в своё распоряжение ID контейнера (основная схема) и массив функций для работы с этим контейнером, его объектами/свойствами/параметрами и т.д.
Далее, ты с помощью этого API перебираешь объекты в этом контейнере (элементы), читая их параметры, передавая ID параметров в другие вспомогательные функции, получая информацию.
Вот так вот кодогенератор и переребирает один за другим элементы/контейнеры/etc.
И тут неважно Delphi, FTCG или RTCG кодогенератор, все они используют одинаковый принцип получения информации о схеме (разная последовательность и другие нюансы могут отличаться).
Куда и сколько экземпляров кода элемента писать, уже решает кодогенератор.
карма: 1
0