分享

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

 露初晞 2010-04-17

    编译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这个库加入进 去。这样就可以了。

Turbo C对于用initgraph()函数直接进行的图形初始化程序, 在编译和链接时并没有将相应的驱动程序(*.BGI)装入到执行程序, 当程序进行到intitgraph()语句时, 再从该函数中第三个形式参数char *path中所规定的路径中去找相应的驱动程序。若没有驱动程序, 则在C:\TC中去找, 如C:\TC中仍没有或TC不存在,将会出现错误:
     BGI Error: Graphics not initialized (use 'initgraph')
  因此, 为了使用方便, 应该建立一个不需要驱动程序就能独立运行的可执行图形程序,Turbo C中规定用下述步骤(这里以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<stdio.h>
     #include<graphics.h>
     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;
     }
    上例编译链接后产生的执行程序可独立运行。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多