|
|
|
Хватаем прерывания в ДОСе
|
|||
|---|---|---|---|
|
#18+
В ДОСе создаем объект, который должен подменить функцию прерывания. Это класс виртуальный. С него хочу наследовать и создавать другой класс со своей функцией прерывания. Объект класса при создании заменяет указанное в конструкторе прерывание. Компилятор Borland 5. Библиотеки все включил в другом файле. Проблема именно в этом коде. Т.е. если без объектов делать, то все работает. Жаль, что не компилируется( Как правильно с объектами записать? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2005, 17:55 |
|
||
|
Хватаем прерывания в ДОСе
|
|||
|---|---|---|---|
|
#18+
во-первых, ваш пример, судя по всему, не полный во-вторых, скорее всего вы упускаете из внимания различия между обычным указателем на функции и указателем на метод класса. Нестатические функции методы имеют обязательный параметр - указатель на объект класса (this) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2005, 18:07 |
|
||
|
Хватаем прерывания в ДОСе
|
|||
|---|---|---|---|
|
#18+
Скажите пожалуйста в чем его неполность. Если в заголовочных файлах, то тут беды нет. Как лучше заменить функцию-член, чтоб не было ошибок? Или это принципиально невозможно, что бы функция-член подменила прерывание? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2005, 18:15 |
|
||
|
Хватаем прерывания в ДОСе
|
|||
|---|---|---|---|
|
#18+
Принципиально возможно, но ... У вас к стати компилятор Borland C++ 5.0 или Borland C++ Builder 5? Ключевое слово __closure есть? А так - почитайте http://www.sql.ru/forum/actualthread.aspx?tid=140106&hl=%f3%ea%e0%e7%e0%f2%e5%eb%fc+%f4%f3%ed%ea%f6%e8%fe ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2005, 18:43 |
|
||
|
Хватаем прерывания в ДОСе
|
|||
|---|---|---|---|
|
#18+
Компилятор не Билдер. __closure слова там не встречал. А функция может быть одновременно virtual и static? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2005, 12:42 |
|
||
|
Хватаем прерывания в ДОСе
|
|||
|---|---|---|---|
|
#18+
Один раз под дос, попросил один борландист до ума довести прерывание... Так же не хотела логика работать. категорично. При разборках данных завалов отладчиком выяснилось, что борланд по умолчанию сохраняет на стэке регистры, подготавливает среду исполнения и прочее. Т.е. то ли нуна было на уровне флагов (обьявлений) компилятора ему явно задать...то ли фиг его знает. Короче говоря - только проанализировав что получаеться - он начирикал обработчик. Рекомендую решать задачу следующими шажками. 1) Заменить любой "свободный" вектор прерывания. 2) Позвать данный вектор "ручками". И проверить стэп бай стэп весь обработчик под отладчиком. 1) Кстати говоря, в инициализации вектора не видел аналогичные телодвижения командам типа CLI, STI ? Возможно они внутри "потрохов" setvect(...) 2) Лучше перед вызовом setvect(...) так же делать disable. Это спасёт Вас от многих неприятностей. 3) Думаю не стоит (хотя бы по первости) обьединять виртуал и вектор. Никто Вам не мешает сделать локальным обработчик прерывания и из него позвать перекрытые виртуал методы. Кстати в нём тогда мона инкапсулировать настройки окружения внутри обработчика. 4) Не забывайте о скорости обработки векторов. Особенно если они аппаратные. удачи Вам (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2005, 13:48 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33172118&tid=2033004]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
65ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 208ms |
| total: | 388ms |

| 0 / 0 |
