代码之家  ›  专栏  ›  技术社区  ›  B.Gen.Jack.O.Neill

Windows控制台

  •  4
  • B.Gen.Jack.O.Neill  · 技术社区  · 15 年前

    嗯,我有一个简单的问题,至少我希望它简单。我对Win32控制台感兴趣有一段时间了。我们的老师告诉我们,Windows控制台只是用于DOS和实模式模拟。嗯,我知道这不是真的,因为DOS应用程序由模拟器运行,模拟器只使用控制台来显示输出。我学到的另一件事是,控制台自NT以来就内置在Windows中。好。但我找不到的是,控制台程序实际上是如何使用控制台编写的。我使用Visual C++进行编程(对学习来说)。所以,对于使用控制台,我唯一需要做的就是选择控制台项目。我首先认为Windows决定它是在控制台中运行应用程序还是在窗口模式下运行应用程序。所以我创建了win32程序并尝试了printf()。嗯,我不能编译它。我知道,根据定义printf()将文本或变量打印到stdout。我还发现stdout是用于输出的控制台接口。但是,我找不到什么是真正的性传播疾病。

    所以,基本上我想问的是,控制台应用和Win32应用之间的区别在哪里?我认为当Windows从“console-family”函数中获得命令时,它会启动console。但显然不是,所以必须有一些代码实际命令Windows创建控制台界面。

    第二个问题是,当创建控制台时,Windows如何识别哪个控制台终端用于哪个应用程序?我是说,什么是性病?它是内存中的一个区域,还是被调用的某个Windows例程?谢谢。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Richard    15 年前

    当您链接一个Win32应用程序时,您可以选择它是Windows还是控制台。在控制台的情况下,将自动分配控制台窗口(或者,如果父进程有控制台窗口,则重新使用)。

    但是,Windows(即GUI)应用程序也可以显示控制台窗口,只需调用 AllocConsole 应用程序编程接口。

    测试应用程序可能由于多种原因未能编译,错误消息应告诉您是否需要:

    • 包括“stdio.h”
    • 参考CRT(C运行时)库
    • 别的东西。

    通常,如果为Win32项目选择“新建项目向导”中的控制台应用程序,这些功能应该可以正常工作,否则您需要选择正确的编译和链接选项。

        2
  •  0
  •   MSN    15 年前

    回答你的第二个问题, stdout 在Windows中映射到 HANDLE 返回的 GetStdHandle(STD_OUTPUT_HANDLE) 默认映射到 CONOUT$ . 你可以拨打 CreateFile("CONOUT$", ...) 如果你这么想的话。