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 resp の egavga.bgi ドライバーを使用することです。Borland C++ または Turbo Pascal パッケージ。次に、それらを正常にコンパイルする必要があります。

このドライバーの特別な機能が必要になることを期待してください。次に、必要に応じて、この取り組みについて確認する必要があります。egavga.bgi、vesa、またはグラフィックを作成するための特別なルーチンを使用したグラフィック モードへの直接切り替えは、DOSBox、EmuDOS、または Windows XP などのすべての 32 ビット バージョンの Windows で動作するはずです。

于 2015-09-23T13:46:12.030 に答える