我在代码块中编写了这个程序,但我在int86(0x33,®s,®s);
中遇到错误错误302。我的节目是
#include<stdio.h>
#include<dos.h>
#include<conio.h>
#include<graphics.h>
void theend();
static int mask[]={/*SCREEN MASK*/
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,
/*CURSOR MASK*/
0x0000,0x0000,0x381c,0x7c3e,0x7c3e,0x7c3e,0x7c3e,
0x3bdc,0x07e0,0x0ff0,0x0ff0,0x0ff0,0x0ff0,0x07e0,
0x03c0,0x0000};
void main()
{int gdriver=DETECT,gmode,buttons;
union REGS regs;
struct SREGS sregs;
initgraph(&gdriver,&gmode,"");
regs.x.ax=0; /*INITIALIZE MOUSE*/
int86(0x33,®s,®s);
setcolor(LIGHTCYAN);
if(regs.x.ax==0)
{outtextxy(0,0,"NO MOUSE AVAILABLE");
getch();
theend();
}
regs.x.ax=9; /*CHANGE CURSOR SHAPE*/
regs.x.bx=5;
regs.x.cx=0;
regs.x.dx=(int)mask;
segread(&sregs);
sregs.es=sregs.ds;
int86x(0x33,®s,®s,&sregs);
regs.x.ax=1; /*SHOW MOUSE POINTER*/
int86(0x33,®s,®s);
do
{regs.x.ax=3;
int86(0x33,®s,®s);
buttons=regs.x.bx & 3;
}while(buttons!=3);
regs.x.ax=2; /*HIDE MOUSE POINTER*/
int86(0x33,®s,®s);
theend();
}
void theend()
{closegraph();}
我找到了一些关于dos.h
文件的博客。是否可以查看dos.h
文件?新dos.h
文件与旧dos.h
文件之间是否存在差异?
答案 0 :(得分:4)
我认为你的编辑有问题。它已将®
更改为注册商标符®
,这是C程序中的无效符号。
编译错误“stray \ 302”表示程序中包含无效字符。在您的情况下,角色为®
。您应该将第int86(0x33,®s,®s)
行更改为int86(0x33, ®s, ®s);
。
对于函数调用int86
,第二个参数是输入寄存器,第三个参数是输出寄存器。我想你正在尝试使用regs
。请注意,最好为输入和输出使用两个单独的变量。 Documentation for int86().