Вверх ↑
Этот топик читают: Гость
Ответов: 9906
Рейтинг: 351
#46: 2007-05-19 19:40:26 ЛС | профиль | цитата
Ну наконец-то
Ровно по прогнозу:
Еще пару страниц, и узнаем - зачем


Есть вопрос давно висящий, но безусловно необходимый к решению:
Среда должна уметь добавлять в ресурс файл по произвольному запросу с CodeGen
Из-за этого у нас FPC не может пристегнуть XP-ресурс
Достаточно-то добавить:
1 24 manifest.xml[/code]

И коллега [b]tsdima[/b] из-за этого мучается. Вырезает гланды конечно, но не совсем через правильное место

Да и элемент Version исполняется средой - не логично как-то.
Подождем [b]Dilma[/b] - пусть и он расскажет, как там у него дела :)
Ну 100 пудов - НАДО

[hr]Кстати, о CodeGen аля WEB...
[b]iarspider[/b], ты это читал :?:
[url]http://hiasm.com/xf/topic.php?t=8215[/url]
карма: 9

0
Ответов: 5446
Рейтинг: 323
#47: 2007-05-19 20:44:40 ЛС | профиль | цитата
Galkov, сейчас ковырялся в библиотеке wxWidgets, разглядывая механизмы работы с шаблонами диалогов. Оказалось, что правильным является DDE (Dialog Data Exchange). Но вот что мы имеем в wxWidgets на эту тему:


#if defined(__WXMSW__)
#include "wx/msw/dde.h"
#else
#error DDE is only supported on MSW
#endif

Т.е., если мы надеемся создать кросс-платформенный пакет на основе GCC, от идеи шаблонов придётся отказаться И, как следствие, можно будет вренуться в рамки внутреннего кодогенератора.

Galkov писал(а):

iarspider, ты это читал
http://hiasm.com/xf/topic.php?t=8215


Читал, читал.
карма: 1

0
Ответов: 5446
Рейтинг: 323
#48: 2007-05-20 16:00:15 ЛС | профиль | цитата
tsdima, скажи, ты сам написал макросы WrapDelphiCall и WrapDelphiCall2? Не подскажешь, как сделать WrapDelphiCall3?
карма: 1

0
Ответов: 5446
Рейтинг: 323
#49: 2007-05-20 19:53:44 ЛС | профиль | цитата
Вопрос не только к tsdima: как вызвать член-функцию класса с 3 и более параметрами, если класс (и функция) написаны на Delphi, а вызывающий код - на C++?
карма: 1

0
Ответов: 2125
Рейтинг: 159
#50: 2007-05-20 20:30:03 ЛС | профиль | цитата
iarspider, скомпилируй тестовый пример на Дельфи, и посмотри что сгенерировалось
карма: 1

0
Ответов: 5446
Рейтинг: 323
#51: 2007-05-20 21:40:19 ЛС | профиль | цитата
tsdima, смешно, согласен. Только вот для меня ассемблер - тёмный лес

[size=-2]------ Добавлено в 21:40
Вот что компилировалось:


library Code;

uses
Windows,kol,
CGTShare in '..\CGTShare.pas';

function CreateCode(SDK:cardinal; _cgt:PCodeGenTools):pointer; cdecl;
var x,y:integer; e:cardinal;
begin
e := _cgt.sdkGetElementName(SDK, PChar('MainForm'));
_cgt.elGetPos(e, X, Y);
end;

procedure ConfToCode(const Pack,UName:string);
var
State:integer;
List,Pas,Body:PStrList;
i,ind:word;
s,MName:string;
begin
end;

exports
CreateCode,
ConfToCode;

end.

А вот что выдал дизассемблер

CODE:00403D68 ; Exported entry   2. CreateCode
CODE:00403D68
CODE:00403D68 ; --------------- S U B R O U T I N E ---------------------------------------
CODE:00403D68
CODE:00403D68 ; Attributes: bp-based frame
CODE:00403D68
CODE:00403D68 public CreateCode
CODE:00403D68 CreateCode proc near
CODE:00403D68
CODE:00403D68 var_C = dword ptr -0Ch
CODE:00403D68 var_8 = dword ptr -8
CODE:00403D68 var_4 = dword ptr -4
CODE:00403D68 arg_0 = dword ptr 8
CODE:00403D68 arg_4 = dword ptr 0Ch
CODE:00403D68
CODE:00403D68 push ebp
CODE:00403D69 mov ebp, esp
CODE:00403D6B add esp, 0FFFFFFF4h
CODE:00403D6E push ebx
CODE:00403D6F mov ebx, [ebp+arg_4]
CODE:00403D72 mov edx, offset aMainform ; "MainForm"
CODE:00403D77 mov eax, [ebp+arg_0]
CODE:00403D7A call dword ptr [ebx+8]
CODE:00403D7D lea ecx, [ebp+var_C]
CODE:00403D80 lea edx, [ebp+var_8]
CODE:00403D83 call dword ptr [ebx+48h]
CODE:00403D86 mov eax, [ebp+var_4]
CODE:00403D89 pop ebx
CODE:00403D8A mov esp, ebp
CODE:00403D8C pop ebp
CODE:00403D8D retn
CODE:00403D8D CreateCode endp
CODE:00403D8D
карма: 1

0
Ответов: 9906
Рейтинг: 351
#52: 2007-05-20 22:08:15 ЛС | профиль | цитата
iarspider писал(а):
Только вот для меня ассемблер - тёмный лес

Без этого же невозможно понимание происходящего

И где ты тут Дельфячий интерфейс наблюдаешь
Он тебе не должен быть нужен ПО-ОПРЕДЕЛЕНИЮ
карма: 9

0
Ответов: 5446
Рейтинг: 323
#53: 2007-05-20 22:46:21 ЛС | профиль | цитата
Да? А как вызывать методы из TCodeGenTools? Не просто же так, наверное, коллега tsdima писал ассемблерные обёртки для вызова этих методов?
карма: 1

0
Ответов: 9906
Рейтинг: 351
#54: 2007-05-21 06:25:34 ЛС | профиль | цитата
Хм.. И правда - все интерфейсные ф-ии не имеют ругательств типа stdcall, или cdecl
карма: 9

0
Администрация
Ответов: 15295
Рейтинг: 1519
#55: 2007-05-21 11:39:51 ЛС | профиль | цитата
Вячеслав писал(а):

Dilma писал что при работе со строками ХиАсм проигрывает С++ в 1000 раз.


Прошу не перевирать. ХиАсм ничего не проигрывает С++. Скорее наоборот - без определенных знаний в особенностях работы со строками в Delphi и C++ зачастую последний проигрывает и очень основательно(повторюсь: проигрывает при написание программы без знаний особенности работы всех strXXX).

Galkov писал(а):
Без этого же невозможно понимание происходящего

Поддерживаю Asm этоже основы мироздания....

iarspider писал(а):
А вот что выдал дизассемблер

ну и что там не понятного?
В первую ф-цию аргументы пошли в регистрах eax и edx. Результат работы ф-ции Delphi традиционно вернул в регистре eax(поэтому передача первого аргумента в коде явно не прописана), далее подгрузил адреса переменных X и Y в регистры ecx и edx и весь получившийся триплет отправился в ф-цию elGetPos.

Galkov писал(а):
И правда - все интерфейсные ф-ии не имеют ругательств типа stdcall, или cdecl

Действительно Поскольку CodeGen старый уже не будет совместим с новой версией среды, то и это поправим на cdecl.

Вывод после прочтения поста: нужно уметь грамотно описать поставленную задачу, а не начинать с хвоста. Реализация собственного механизма в обход существующего - это бомба замедленного действия, которая взорвется с вероятностью 99.9%. Вспомним недавний диспут по парсингу SHA на предмет наличия Дебугов после элементов на схеме... Кроме того делать работу, которую за тебе уже сделала среда это откат назад(элементы LineBreak, HubEx и прочие уже не видны на этапе кодогенерации, ссылочные контейнеры-мультики без особой их обработки "видны" через интерфейс кодогенератора так, словно они ссылками не являются вовсе и позволяют делать правильную программу, и еще кучу примеров можно привести...)

PS: да и еще - хотелось бы поподробнее услышать по поводу алгоритма вычисления изменений в контейнере(контрольную сумму чего? ) и перегенерации *.h и *.cpp.
карма: 27
0
Ответов: 9906
Рейтинг: 351
#56: 2007-05-21 11:52:07 ЛС | профиль | цитата
Dilma писал(а):
Поскольку CodeGen старый уже не будет совместим с новой версией среды

Нодо отметить - порадовал
карма: 9

0
Ответов: 2125
Рейтинг: 159
#57: 2007-05-21 12:13:27 ЛС | профиль | цитата
Dilma писал(а):
то и это поправим на cdecl

Может быть на stdcall?
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#58: 2007-05-21 12:34:06 ЛС | профиль | цитата
если stdcall, то придется менять везде, чтобы не было каши.

[size=-2]------ Добавлено в 12:34
Dilma писал(а):
Действительно Поскольку CodeGen старый уже не будет совместим с новой версией среды

в Preview подробно не расписывал опишу тут: теперь кодогенератор по мимо прочих изменений еще и отвечает за запуск, отладку, трассировку и остановку программ и приложений, которые он делает. Среда больше ничего не знает(и знать не желает) о том, что в конечном счете собирается по схеме, которую она предоставляет. Все что среда понимает это несколько команд, передающихся по UDP и позволяющих управлять схемой из конечного приложения. По идее уже сегодня можно сделать запуск программы PocketPC и отлаживать её непосредственно с удаленной машины(КПК) как простую Windows программу.

Так же появился минимальный интерфейс для вывода контекстной подсказки в редакторе кода. По идее если реализовать парсер исходников, то можно сделать более менее приличную среду для редактирования *.pas.
карма: 27
0
Ответов: 5446
Рейтинг: 323
#59: 2007-05-21 12:45:03 ЛС | профиль | цитата
Dilma, а в каком регистре передался указатель this?
карма: 1

0
Ответов: 9906
Рейтинг: 351
#60: 2007-05-21 13:04:42 ЛС | профиль | цитата
this - это первый аргумент.
В принципе - языково-зависимая вещь (не стандартизированная, по-моему)
В Дельфях, соответственно, это EAX.

[size=-2]------ Добавлено в 13:04
Кстати, что значит "передавался"
Не было такого в CodeGen, вроде
карма: 9

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