DJGPP下调用中断的方法

DJGPP是DOS下完整的32位的C/C++保护模式的编译器,运行于386以上机器。DJGPP有一个好帮手叫作Allegro,它是个图形/声音编程库,功能非常强大,应用于界面编程非常方便。可以Allegro编程库编写程序,然后用DJGPP编译。

但是,因为DJGPP是标准C,所以是不存在interrupt,setvect,putvect函数的,这样会让习惯Turbo C的同志遇到点小麻烦,小弟现在就介绍“解决方法”。。。。:)

int _go32_dpmi_get_real_mode_interrupt_vector(int vector, _go32_dpmi_seginfo *info);
int _go32_dpmi_set_real_mode_interrupt_vector(int vector, _go32_dpmi_seginfo *info);

int _go32_dpmi_chain_protected_mode_interrupt_vector(int vector, _go32_dpmi_seginfo *info);

typedef struct {
  unsigned long size;
  unsigned long pm_offset;
  unsigned short pm_selector;
  unsigned short rm_offset;
  unsigned short rm_segment;
} _go32_dpmi_seginfo;

这就是DPMI.H头文件的几个函数,用法在下面介绍

_go32_dpmi_seginfo OldVect;
_go32_dpmi_seginfo NewVect;

static int NewFunction(); //应用的中断处理函数

_go32_dpmi_get_protected_mode_interrupt_vector(0x0c, &OldVect);//取得旧中断向量
NewVect.pm_offset=(int)NewFunction;//看看结构体的定义就明白了
_go32_dpmi_chain_protected_mode_interrupt_vector(0x0c,&NewVect);//设置新中断向量

这样就可以了,^_^我也是新手  希望能对大家有点帮助 谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值