| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > С -> Delphi |
| Автор: Aster!x 13.10.2004, 12:20 |
| Как этот код будет выглядеть на Delphi? Естественно без использования asm вставок. EXCEPTION_DISPOSITION __cdecl _except_handler( struct _EXCEPTION_RECORD *ExceptionRecord, void * EstablisherFrame, struct _CONTEXT *ContextRecord, void * DispatcherContext ) { ContextRecord->Eip = seh.SafeEip; ContextRecord->Esp = seh.PrevEsp; ContextRecord->Ebp = seh.PrevEbp; // Tell the OS to restart the faulting instruction return ExceptionContinueExecution; } |
| Автор: <Spawn> 13.10.2004, 12:50 | ||
Примерно так, тебе остается лишь выяснить что есть EXCEPTION_DISPOSITION и ExceptionContinueExecution:
|
| Автор: p0s0l 13.10.2004, 14:20 | ||
|
| Автор: Aster!x 13.10.2004, 14:44 |
| <Spawn> Спасибо, всё получилось, а то я сначала запутался в этих поинтерах %) |
| Автор: Aster!x 13.10.2004, 15:13 | ||
| p0s0l А вот если использовать этот enum что-то не получается, вот такой код генерит компилятор:
Как бы ему указать что нужно DWORD возвращать? |
| Автор: p0s0l 13.10.2004, 15:29 | ||||
Переопредели тип так:
Добавлено @ 15:29 Или так:
|
| Автор: Aster!x 13.10.2004, 15:46 | ||||
| Да уж, Дельфи есть Дельфи, никакой гибкости теперь код генерится такой:
Эти строчки явно лишние :-)
|
| Автор: p0s0l 13.10.2004, 16:17 |
| Может у тебя оптимизация вырублена ? Посмотри Project->Options->Compiler... У меня нормально без этих строк компилится... И какая у тебя Delphi ? Иначе, если уж для тебя эти лишние пары тактов критичны, то пиши процедуру полностью asm-вставкой... |
| Автор: Aster!x 13.10.2004, 17:10 | ||
| p0s0l Да, ты прав, оптимизация отключена, иначе компилятор не даёт два раза присвоить переменную, удаляет первое присваивание из кода:
|
| Автор: p0s0l 13.10.2004, 17:14 | ||
| Можешь в нужных местах отрубать оптимизацию, а потом включать: {$O-} и {$O+} Только учти, что можно включить/выключать оптимизацию целых функций/процедур, а не отдельных команд... То бишь делай так:
PS: а зачем тебе там первое присваивание ? |
| Автор: Aster!x 13.10.2004, 17:34 | ||
Во, и компилятор тоже видимо не понимает Если SEH не сработал то в MessageBox попадёт второе присваивание, иначе первое. Спасибо за совет, про оптимизацию теперь понял. |