IPB

> SetIntVec (процедура) (модуль WinDos)
Чат
Форум
Загрузка...
 

Язык:
Русский
English

 SetIntVec (процедура)   (модуль WinDos)


Устанавливает заданный вектор прерывания на заданный адрес.

Объявление

 Procedure SetIntVec(IntNo : Byte; Vector : Pointer);

Режим

Windows, Real, Protected;

Замечания

IntNo определяет номер вектора прерываний (0 .. 255) и Vector определяет адрес.

Vector обычно создается с помощью оператора @ для указания адреса процедуры обработки прерывания. Пусть Int1BSave - переменная указательного типа и Int1BHandler - идентификатор процедуры обработки прерывания, тогда первая последовательность операторов устанавливает новый обработчик прерывания, а вторая восстанавливает первоначальный обработчик:

 GetIntVec ($1B, Int1BSave);
 SetIntVec ($1B, @Int1BHandler);
 .
 .
 .
 SetIntVec ($1B, Int1BSave);

Ограничения

В защищенном режиме DOS, в стандартном или расширенном режимах Windows, SetIntVec устанавливает вектор прерывания защищенного режима с заданным номером вектора прерываний. SetIntVec не может использоваться для изменения векторов прерываний реального режима или векторов исключений в защищенном режиме.

Смотри также

Пример

Язык:
Русский
English


 { Пример программы для процедур GetIntVec и SetIntVec }

{ Обращайтесь с системными прерываниями с максимальной осторожностью }
{ Неверное использование прерываний может повредить информацию и/или }
{ сам компьютер на аппаратном уровне ! }

{ Ещё один пример использования обработчиков прерываний можно }
{ посмотреть в программе для процедуры Keep }

uses Dos, Crt;

var
  Int1CSave : Pointer;
  Fl        : Boolean;

{$F+}
procedure TimerHandler; Interrupt;
begin
 { ISR на события таймера }

 {*** Обратитесь к документации по DDK или
   DPMI для информации по созданию ISR *** }


 { ISR на события таймера вызываются 18 раз в секунду }

 { Данный пример включает внутренний динамик 9 раз в
    секунду с частотой 1000 }


 if Fl then
    NoSound
 else
    Sound(1000);
  Fl := not Fl;
end;
{$F-}

begin
 { Получаем старый вектор прерывания $1C - (системный таймер) }
 { и сохраняем его в переменной Int1CSave }
  GetIntVec($1C, Int1CSave);
 { Переназначаем его на нашу процедуру обработки прерывания }
  SetIntVec($1C, @TimerHandler);
 WriteLn('Нажмите любую клавишу для снятия обработчика...');
 repeat
 until KeyPressed;
 { Возвращаем обработчик прерывания в исходное состояние }
  SetIntVec($1C, Int1CSave);
end.
 
 К началу страницы 
Тэги: SetIntVec
 

Код для вставки: :: :: :: ГОСТ ::
Поделиться: //
 



-
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"