c++ - 在 Windows 7 64 位操作系统上使用 DosBox 在 Turbo C++ 中以高分辨率模式使用 IBM 3514 Borland 图形接口(interface)驱动程序

标签 c++ windows-7-x64 dosbox turbo-c++ bgi

我在 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 颜色绘图。

最佳答案

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

关于c++ - 在 Windows 7 64 位操作系统上使用 DosBox 在 Turbo C++ 中以高分辨率模式使用 IBM 3514 Borland 图形接口(interface)驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7808504/

相关文章:

c++ - OpenGL 变换

fortran - Windows 7 64 位上的 compaq visual fortran?

c++ - 侵入式 rbtree 中第一个元素的恒定时间测试

c++ - 如何简化这个二叉树遍历函数?

c++ - 如何将 void* 转换为 shared_ptr<mytype>

c++ - D3D11CreateDeviceAndSwapChain 未解析的外部

android - SSLException:连接已关闭:javax.net.ssl.SSLException:标签不匹配

assembly - DOSBox:debug.exe 读取文件 - 错误地处理命令

assembly - 我可以在dosbox中运行切换到保护模式的汇编程序吗?

assembly - 在 x86 汇编中实现 160x100 模式