Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: прерывания  (Прочитано 12961 раз)
0 Пользователей и 1 Гость смотрят эту тему.
direct
Гость
« : 24-02-2005 18:20 » 


Доброго времени суток всем! Решил вспомнить как
писать проги под DOS Улыбаюсь  Вопрос такой: как функцию-обработчик
прерываний типа "void interrupt f(...)" сделать членом класса? Компилятор
сильно ругается:-)
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 24-02-2005 20:53 » 

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

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Alf
Гость
« Ответ #2 : 24-02-2005 21:54 » 

Давненько не доводилось обрабатывать прерывания в DOS... Насколько помнится, обработчик прерывания должен быть свободной функцией.

Если функция является членом класса, она получает помимо формальных параметров еще и скрытый указатель на экземпляр класса - this. Поэтому указатель на свободную функцию и указатель на функцию-член класса несовместимы по типам, даже если сигнатуры совпадают.

Возможно, получится сделать обработчиком прерывания статическую функцию-член класса, но не уверен на 100%. Документация от Borland C++ на этот счет довольно скудная, а то, что добывалось опытным путем, уже основательно позабыто.
Записан
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« Ответ #3 : 25-02-2005 09:43 » 

никак, direct Жаль
я не пробовал сделать это в билдере, но не думаю что в этом плане он отличается от вижуала.
на Visual 6, у меня не получилось Жаль.
как мне кажется из-за проблем с указателем на эту функцию как члена класса.
Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #4 : 25-02-2005 10:03 » 

Артем, под Windows нету прерываний... Еще бы у тебя получилось под VC..
А вообще статическая функция может сработать.
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« Ответ #5 : 25-02-2005 10:43 » 

Ладно, ладно глупость написал.
Сбило то что "Borland C", прочитал как Билдер... 
....типа стыдно....

но я и статическую функцию пробовал, не работает.... ( в BORLANDе)
Записан
Pu
Большой босс

ru
Offline Offline
78


« Ответ #6 : 25-02-2005 13:27 » 

вообще-то статик функции ничем не отличаются от обычных глобальных функций, вот только нету им доступа к членам класса нестатическим. Так как можно их вызывать без создания объектов класса. Странно было бы обращаться к членам класса , когда они не существуют. Отсюда нет и смысла  практически делать такую функцию членом класса. Выигрыш только в разделении пространств имен.
Должно работать , имхо.
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
direct
Гость
« Ответ #7 : 25-02-2005 18:41 » 

Короче, все ООП коту под хвост, если работаешь с прерываниями?Улыбаюсь
А если обработчик на асемблере перекодить, фокус пройдет?Улыбаюсь
Записан
Migmile
Помогающий

ru
Offline Offline

« Ответ #8 : 17-03-2005 15:47 » 

А может и не нужно?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 21-04-2006 20:24 » new

(комент)

         развить мысль - и в
ЧАВО
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines