flint2 писал(а):
Там ассемблер нормальный.Неправда. Там ассемблер кривой. Он читает данные ниже стека (боцман, за такое - бил канделябрами по голове)
Но хотя бы читаемый...
Вызвать правую точку можно так:
Add(Edit,12747185,231,105)
{
Left=105
Top=110
Width=215
Text=""
}
Add(Edit,9832808,98,105)
{
Left=105
Top=15
Width=215
Text="111111111111"
link(onChange,15830079:doWork,[])
}
Add(InlineCode,15830079,168,105)
{
WorkPoints=#6:doWork|
EventPoints=#7:onEvent|
DataPoints=#6:Param1|0:|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|8: |9: public|26: Param1: THI_Event; |24: onEvent: THI_Event; |50: procedure doWork(var _Data:TData; Index:Word); |6: end; |0:|14:implementation|0:|46:procedure Name1(Event:THI_Event; str:string); |3:asm|57: PUSH esi // сохраняем неприкасаемый регистр|16: XOR ecx, ecx|75:// резервирование памяти под TData (там есть указатели => нули обязательны)|11: PUSH ecx|11: PUSH ecx|11: PUSH ecx|11: PUSH ecx|11: PUSH ecx|11: PUSH ecx|11: PUSH ecx|37:// заполняем TData нужной информацией|81: MOV [esp].TData.sdata, edx // собственно строка (второй аргумент лежит в edx)|43: MOV byte[esp].TData.Data_type, data_str|34:// ...............................|41:// ..... делаем чего-нибудь нужное |34:// ...............................|23:// делаем вызов Event-а|81: MOV esi, eax // Адрес структуры THI_Event (первый аргумент лежит в eax)|56: MOV eax, [esi+4] // Адрес Self (первый аргумент)|63: MOV edx, esp // Адрес _Data (второй аргумент) |56: MOV cx, [esi+8] // Index (третий аргумент)|51: CALL dword[esi] // Вызов метода объекта Self|34:// ...............................|41:// ..... делаем чего-нибудь нужное |34:// ...............................|59:// сборка автомата производится в порядке обратном разборке|40: ADD esp, 28 // убираем TData|63: POP esi // восстанавливаем неприкасаемый регистр|5: RET|4:end;|0:|29:procedure THiAsmClass.doWork;|13:var S:string;|5:begin|33: S := ReadString(_Data, Param1);|20: Name1(onEvent, S);|4:end;|0:|4:end.|
link(onEvent,12747185:doText,[])
}
------------ Дoбавленo в 12.20:
На будущее: стиль представления Вами данных является совершенно неприемлемым.
И таковой будет оставаться без ответа в последствии.
Можете мои данные взять за образец (за приемлемый стиль)