写了下面的代码:
#include <graphics.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
/* request auto detection */
int gdriver = DETECT, gmode, errorcode;
int midx, midy, midx2, midy2;
int radius = 25;
/* initialize graphics and local variables */
initgraph(&gdriver, &gmode, "c:/turboc3/bgi");
/* read result of initialization */
errorcode = graphresult();
if (errorcode != grOk) /* an error occurred */
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1); /* terminate with an error code */
}
midx = midx2 = getmaxx() / 2;
midy = midy2 = getmaxy() / 2;
int i = 0;
setfillstyle(1, 3);
while (!kbhit())
{
cleardevice();
setcolor(RED);
setfillstyle(XHATCH_FILL, RED);
fillellipse(midx2, midy2, radius, radius);
setcolor(GREEN);
setfillstyle(XHATCH_FILL, GREEN);
fillellipse(midx, midy, radius, radius);
setcolor(WHITE);
line(midx2, midy2, midx, midy);
i = getch();
switch(i)
{
case 115: midy += 2; break;
case 119: midy -= 2; break;
case 97: midx -= 2; break;
case 100: midx += 2; break;
default: return 0;
}
}
/* clean up */
getch();
closegraph();
return 0;
}
编译,编译,收到一个.exe文件。当通过 Turbo C++ (ctrl + F9) 启动时,一切正常,显示,绘制。当我运行 exe 文件本身时,我看到了下图:一个空的控制台,行的开头有一个闪烁的光标:没有绘制任何内容,没有从键盘输入任何内容(exe 文件被扔进了 Source 文件夹编译后我没有把它从那里拉出来)。

我爬上了英文论坛,了解甚少,但问题似乎在于 Turbo C 制作的 16 位程序不再在 64 位上运行。但!2要点:第一,我是32位的Windows 7,其次,论坛上有人说他在编译一个32位的程序(但没有解释如何)。
简而言之,问题是:我做错了什么,为什么什么都没画,如何解决?
Ps 我知道该程序已过时,有 sfml 等,但这个特殊时刻对我来说很有趣。
实际上,
Turbo C++它会创建现代操作系统默认不支持的 16 位程序。该怎么办?视窗 32 位
您将需要
NTVDM(虚拟机DOS NT)。默认情况下不安装,但可以使用DISM. 要安装它,请PowerShell以管理员身份运行并运行命令:如果您需要删除此组件,请运行:
视窗 64 位
在 64 位 Windows 系统上,该组件
NTVDM不再可用。为了运行 16 位应用程序,您需要第三方虚拟机,例如DOSBox。为什么在通过 Turbo C++ 运行时一切正常?
Turbo C++它只是通过虚拟机运行DOSBox,让您的程序正常工作。