Вверх ↑
Этот топик читают: Гость
Ответов: 2125
Рейтинг: 159
#76: 2007-05-21 21:50:28 ЛС | профиль | цитата
iarspider писал(а):
Я её отдельно завернул вот как

Я бы проще сделал:
inline cardinal GetParam(WORD index, void* value)
{
__asm mov ax, index;
__asm mov edx, value;
__asm mov ecx, this;
__asm call dword ptr [ecx].pGetParam;
}
карма: 1

0
Ответов: 5446
Рейтинг: 323
#77: 2007-05-26 13:21:19 ЛС | профиль | цитата
Создание пакета GCC идёт полным ходом. В процессе разбора кодогенератора, возник вопрос:
а нафига создание MultiElement-а идёт через одно место:


  function Create_hiMultiElementEx_1546EB0(Control:PControl):THiEditMultiEx;

implementation

function Create_hiMultiElementEx_1546EB0;
begin
Result := TClassMultiElementEx_1546EB0.Create(Control).Child;
end;

Почему бы сразу на вызывать конструктор?
карма: 1

0
Ответов: 9906
Рейтинг: 351
#78: 2007-05-26 13:33:53 ЛС | профиль | цитата
iarspider писал(а):
Почему бы сразу на вызывать конструктор?

Попробуй, посмотрим через какое место у тебя получится
В смысле - замкни коды, чтобы работало все...
карма: 9

0
Ответов: 5446
Рейтинг: 323
#79: 2007-05-26 17:00:59 ЛС | профиль | цитата
Galkov, вместо того, чтобы ругаться, объяснил бы, какими особенностями и чего вызвано такое решение. Если не знашеь - то промолчи, пожалуйста.

[size=-2]------ Добавлено в 17:00
Переформулирую вопрос: чем вызов Create_hiMultiElementEx_1546EB0 лучше (хуже), чем вызов конструктора с последующим взятием члена Child?
карма: 1

0
Ответов: 9906
Рейтинг: 351
#80: 2007-05-26 17:27:39 ЛС | профиль | цитата
iarspider писал(а):
чем вызов конструктора с последующим взятием члена Child?

Сначала покажи конкретно место где ты будешь его вызывать, потом можно будет сказать чем.

iarspider, в Ваши годы пора бы различать ругань от обыкновенного прагматизма
Скажу даже больше: ответ в этом посте НЕ ОТЛИЧАЕТСЯ по содержанию от предыдущего.

Просто не нервничать надо, а думать.
Никто не утверждает, что не существует иных вариантов кодирования.
Покажи - будем обсуждать.
карма: 9

0
Ответов: 5446
Рейтинг: 323
#81: 2007-05-26 18:22:01 ЛС | профиль | цитата
Galkov, уже нашёл, где идёт вызов этого метода, и начал понимать, в чём ГФС (Глубокий Философский Смысл (с)) такого хода.
карма: 1

0
Ответов: 5446
Рейтинг: 323
#82: 2007-05-27 00:33:14 ЛС | профиль | цитата
Так. Почти доделал кодогенератор. Вопрос: правильно лия понял, что метод ConfToCode вызывается т.н. ECreator-ом?
карма: 1

0
Ответов: 2125
Рейтинг: 159
#83: 2007-05-27 14:19:23 ЛС | профиль | цитата
Правильно понял.

[size=-2]------ Добавлено в 14:19
iarspider писал(а):
Почему бы сразу на вызывать конструктор?

Вызов конструктора - это не просто вызов функции, а вызов соответствующего оператора new с последующей передачей указателя на выделенный кусок памяти конструктору (если объект статический, то просто вызов конструктора с фиксированным адресом). Поэтому нельзя получить указатель на конструктор объекта. А мультику нужен именно адрес функции для создания экземпляра схемы.
карма: 1

0
Ответов: 5446
Рейтинг: 323
#84: 2007-05-27 16:14:30 ЛС | профиль | цитата
Разбираюсь с make_xxx. Вопрос: вызов EndBuild происходит всегда или только при удачной компиляции?
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#85: 2007-05-28 12:54:45 ЛС | профиль | цитата
Всегда. Кстате в новой версии на make_xxx возложено гораздо больше обязательств в виде такого интерфейса:

function buildGetParamsProc(var params:TBuildParams):integer; cdecl;[/code]
возвращает параметры проекта. Это один из флагов, определенных в CGTShare:
  // параметры проекта
  CGMP_COMPRESSED    = $01; // поддерживает сжатие
CGMP_RUN = $02; // поддерживает запуск из среды
CGMP_RUN_DEBUG = $04; // поддерживает запуск из среды в отладочном режиме

function buildMakePrj(const params:TBuildMakePrjRec):integer; cdecl;[/code]
старая ф-ция для сборки конечного проекта.

function buildCompliteProc(const params:TBuildCompliteRec):integer; cdecl;[/code]
вызывается после buildMakePrj

function buildRunProc(const params:TBuildRunRec):integer; cdecl;[/code]
а эту ф-цию hiasm вызывает при запуске приложения в случае наличия флага CGMP_RUN.


по идее такого интерфейса должно хватить для будущих расширений с совместимостью старых мейков.

[size=-2]------ Добавлено в 12:54 [/size]
[b]iarspider[/b], кстате хотелось бы в общих чертах увидеть описание технологии пакета. Просто не думаю, что имеет смысл всерьез заморачиваться над этим с применением ф-ности используемой сейчас в стандартном пакете. Это красивое и простое решение, но к сожалению тупиковое с точки зрения дальнейшего развития и расширения. Идеалогия KOL пока еще спасает положение и EXE файлы получаются всеже меньше аналогичных, написанных на VCL. Однако wxWidgets это в первую очередь библиотека кросплатформенной разработки приложений и видимо стартовый объем исполняемых файлов уже будет достаточно большим...
карма: 27
0
Ответов: 5446
Рейтинг: 323
#86: 2007-05-28 15:39:13 ЛС | профиль | цитата
Dilma, вопрос не очень понял, что имеется в видк под "имеет смысл всерьез заморачиваться над этим с применением ф-ности используемой сейчас в стандартном пакете": "не стоит заморачиваться до выхода новой версии Delphi" (в которой будут указанные ововведения), "не стоит заморачиваться до выхода Hiasm 4", "не стоит заморачиваться вообще"?

Насчёт объёма: да, объём получается немаленьким, но:
а) при использовании статической линковки не со всеми, а только с нужными, частями библиотеки можно уменьшить объём
б) UPX позволяет (под виндой) получать существенно меньшие файлы
карма: 1

0
Ответов: 9906
Рейтинг: 351
#87: 2007-05-28 15:51:45 ЛС | профиль | цитата
iarspider, вопросом на вопрос - это неправильно
Сначала ты отвечаешь на:
Dilma писал(а):
хотелось бы в общих чертах увидеть описание технологии пакета

А потом будет уже совершенно логичен ответ на твое:
iarspider писал(а):
вопрос не очень понял, что имеется в виду под

карма: 9

0
Ответов: 5446
Рейтинг: 323
#88: 2007-05-28 15:56:23 ЛС | профиль | цитата
Эх... Ну не умею я описывать свои идеи...

Идея пакета такова: на основе wxWidgets писать на HiAsm программы под Linux и PPC. "Штатный" пакет PPC не устраивает по двум причинам: во-первых, он находится в зачаточно-заброшенном состоянии, во-вторых он намертво привязан к M$овскому компилятору (я честно долго мучался, пытаясь хоть как-то откомпилировать минимальный проект с помощью GCC, но бросил это, так как для работы с GCC надо переписывать весь пакет).
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#89: 2007-05-28 16:31:12 ЛС | профиль | цитата
iarspider, опять неправильно Во-первых, это описание уже давалось и не раз, во-вторых, там нет ни слова о самой технологии. Технология это процесс в результате которого получается некоторый продукт. Ты же дал описание самого продукта. Хотелось бы услышать нечто вроде:

"Пакет Delphi представляет из себя упрощенную объектно ориентированную модель метод-событие. Каждый компонент пакета не зависимо ни о от чего представляет из себя экземпляр класса со своими полями(свойствами и событиями) и функциями(методами). Кодогенератор при компиляции проекта строит списки таких объектов с вызовом конструкторов при инициализации проекта и деструктором при его уничтожение. Так же между всеми объектами схемы строятся статические связи(слинкованные точки на схеме) в виде помещения указателей методов одного объекта в соответствующие поля событий другого. Причем поток данные-свойства эквивалентен потоку событие-метод с той лишь разницей, что может передавать данные в обе стороны."

это очень краткое поверхностное описание. Для полного понимания происходящего нужно еще упоменуть про МТ, про работу ReadXXX, про InitMan и прочее.
карма: 27
0
Ответов: 5446
Рейтинг: 323
#90: 2007-05-28 18:42:29 ЛС | профиль | цитата
Dilma, Тогда совсем кратко: взял кодогенератор от Delphi, переписал его под cpp+wxWidgets. Коды компонентов будут основаны на PPC-шных.
карма: 1

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)