Вверх ↑
Ответов: 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