BGI?Error:?Graphics?not?initialized?处理方法

来源:百度文库 编辑:神马文学网 时间:2024/04/27 18:03:41

   编译registerbgidriver(EGAVGA_driver);出错的原因是因为在链接的时候编译器没有找到eagvga这个图形库,说白了就是没有驱动。在turboc2目录底下有一个BGI文件夹里面有一个BGIOBJ.EXE和EGAVGA.BGI。BGIOBJ.EXE是把BGI格式的文件转成OBJ二进制格式的文件,在DOS底下进入这个文件夹用命令BGIOBJ EGAVGA这时生成一个EGAVGA.OBJ文件,把EGAVGA.OBJ文件考到turboc2目录底下的LIB文件夹下,再把turboc2目录下的TLIB.EXE也考进来,这样做就是为了在链接的时候少敲一些路径。都做完了,然后在DOS下进入LIB这个文件夹用命令TLIB GRAPHICS+EGAVGA把EGAVGA这个库加入进去。这样就可以了。

TurboC对于用initgraph()函数直接进行的图形初始化程序,在编译和链接时并没有将相应的驱动程序(*.BGI)装入到执行程序,当程序进行到intitgraph()语句时,再从该函数中第三个形式参数char*path中所规定的路径中去找相应的驱动程序。若没有驱动程序,则在C:\TC中去找,如C:\TC中仍没有或TC不存在,将会出现错误:
    BGI Error: Graphics not initialized (use 'initgraph')
  因此, 为了使用方便,应该建立一个不需要驱动程序就能独立运行的可执行图形程序,TurboC中规定用下述步骤(这里以EGA、VGA显示器为例):
    1.在C:\TC子目录下输入命令:BGIOBJ EGAVGA
   此命令将驱动程序EGAVGA.BGI转换成EGAVGA.OBJ的目标文件。
    2.在C:\TC子目录下输入命令:TLIB LIB\GRAPHICS.LIB+EGAVGA
   此命令的意思是将EGAVGA.OBJ的目标模块装到GRAPHICS.LIB库文件中。
    3.在程序中initgraph()函数调用之前加上一句:
      registerbgidriver(EGAVGA_driver):
该函数告诉连接程序在连接时把EGAVGA的驱动程序装入到用户的执行程序中。经过上面处理,编译链接后的执行程序可在任何目录或其它兼容机上运行。假设已作了前两个步骤,若再向例6中加registerbgidriver()函数则变成:
    例:
    #include
    #include
    int main()
    {
        int gdriver=DETECT,gmode;
        registerbgidriver(EGAVGA_driver):  /*建立独立图形运行程序 */
        initgraph( gdriver, gmode,"c:\\tc");
        bar3d(50,50,250,150,20,1);
        getch();
        closegraph();
        return 0;
    }
   上例编译链接后产生的执行程序可独立运行。