阅读:1187回复:4
DOS下BC31的中断程序(类成员),急急急
我在编写一控制软件,打算将DOS下中断有关的过程组成一个类,利用构造函数和析构函数完成中断的挂接和解挂,同时将中断服务程序也作为类成员。但在用setvect函数设置中断矢量时不能成功,原因是不能确定中断服务程序的地址(因为是类成员)。记得很早以前曾经见过一篇进行这种处理的文章,当时曾经试过没问题,可惜现在记不得了。不知哪位高手知道这种技术,急啊。。。给20分。
|
|
沙发#
发布于:2003-12-31 10:30
static
|
|
板凳#
发布于:2003-12-31 23:21
似乎没有这么简单吧。我试了试,设置为静态函数或内联函数都没法取得函数地址。
|
|
地板#
发布于: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(具体哪个选项也记不清,查查帮助,肯定有)。 |
|
|
地下室#
发布于:2004-01-02 15:32
cool-net,按你介绍的方法成功了!不胜感激。
|
|