rabbit_xyz
驱动牛犊
驱动牛犊
  • 注册日期2003-12-14
  • 最后登录2004-01-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1187回复:4

DOS下BC31的中断程序(类成员),急急急

楼主#
更多 发布于:2003-12-30 23:05
我在编写一控制软件,打算将DOS下中断有关的过程组成一个类,利用构造函数和析构函数完成中断的挂接和解挂,同时将中断服务程序也作为类成员。但在用setvect函数设置中断矢量时不能成功,原因是不能确定中断服务程序的地址(因为是类成员)。记得很早以前曾经见过一篇进行这种处理的文章,当时曾经试过没问题,可惜现在记不得了。不知哪位高手知道这种技术,急啊。。。给20分。
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-12-31 10:30
static
rabbit_xyz
驱动牛犊
驱动牛犊
  • 注册日期2003-12-14
  • 最后登录2004-01-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-12-31 23:21
似乎没有这么简单吧。我试了试,设置为静态函数或内联函数都没法取得函数地址。
cool-net
驱动小牛
驱动小牛
  • 注册日期2003-03-18
  • 最后登录2010-01-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-01-01 01:18
不会吧,怎么会呢?

class far Isr
{
private:
 static void (interrupt far* m_OldIsr)(...);
public:
 static void Install();
 static void Uninstall();
private:
 static void interrupt far IsRoutine(...);
};

void Isr::Install()
{
 Isr::m_OldIsr = getvect(XXX_INT);

 disable();

 setvect(XXX_INT, Isr::IsRoutine);

 enable();
}

void Isr::Uninstall()
{
 disable();

 setvect(XXX_INT, Isr::m_OldIsr);

 enable();
}

void interrupt far Isr::IsRoutine(...)
{
 // Do something ... ...
}

这么久了,记不大清,大约如此罢,如果你不是使用大模式或巨模式,一定要加那个far(具体加哪儿记不清,你查查帮助),或在编译选项里指定指针默认全为far(具体哪个选项也记不清,查查帮助,肯定有)。
有错误才会有进步,所以我的人生目标是: 错误不断,毁人不倦!
rabbit_xyz
驱动牛犊
驱动牛犊
  • 注册日期2003-12-14
  • 最后登录2004-01-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-01-02 15:32
cool-net,按你介绍的方法成功了!不胜感激。
游客

返回顶部