2

我正在使用 Windows 7 64 位上的 DosBox 在 Turbo C++ 中运行图形程序。现在,我想IBM3514在高分辨率模式下使用图形驱动程序 ( IBM3514HI)。因此,我编写了以下基本程序来测试它:

#include <graphics.h>
#include <iostream.h>

void main() {
    int gd = IBM3514, gm = IBM3514HI, e;
    initgraph(&gd, &gm, "C:\\TC\\BGI");
    if (e = graphresult()) {
        cout << grapherrormsg(e);
    }
    cleardevice();
    rectangle(100, 100, 300, 300);
    cin.get();
    closegraph();
    restorecrtmode();
}

现在,程序编译并运行,没有任何错误。但是,initgraph函数调用不会初始化图形模式。graphresult的返回值为0。因此,没有发生错误。然而,该程序仍以文本模式运行。闪烁的下划线可见,矩形未绘制。

我检查了我C:\TC\BGI的文件夹并且该IMB3514.BGI文件存在。因此,我假设它确实加载了图形驱动程序。然而,我无法弄清楚为什么程序不能在图形模式下执行,甚至会抛出错误。但是,如果我使用默认设置,它工作得很好:int gd = DETECT, gm;

任何关于为什么我的程序不起作用的解释将不胜感激。请尝试提供解决此问题的方法。我真的很想在有颜色的1024x768屏幕上画画。256

4

3 回答 3

5

在 Windows 下,您的图形适配器是虚拟化的。您不能直接访问它并使用它的特定功能(除非您使用 DirectX/OpenGL/其他奇怪的方法)。DOSBox 为它运行的程序模拟一些“历史”图形适配器(准确地说:Tandy/Hercules/CGA/EGA/VGA/VESA)。您必须使用 TC 的 VESA 2.0 驱动程序(或一般的 VESA 驱动程序)。

于 2011-10-18T14:11:03.347 回答
2

驱动程序的正确名称是 ibm8514.bgi - 不是“3514”,也不是“imb”左右。但就像我之前的演讲者所说,你最好使用另一个驱动程序。最好的选择是使用 Turbo 的 egavga.bgi 驱动程序。Borland C++ 或 Turbo Pascal 包。然后你应该编译它们成功。

预计您需要此驱动程序的特殊功能。然后,如果需要,您必须检查他们的这项工作。我认为 egavga.bgi、vesa 或通过一些特殊的例程直接切换到图形模式来制作图形应该在 DOSBox、EmuDOS 或 Windows XP 等所有 32 位版本的 Windows 中工作。

于 2015-09-23T13:46:12.030 回答
0

试试这个代码:

int gd = 6, gm = 0, e;

(两个变量都是整数,而不是字符串)

于 2021-09-26T21:35:52.150 回答