编译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;
}
上例编译链接后产生的执行程序可独立运行。