gpt4 book ai didi

winapi - bcc32 - 没有控制台子系统,也没有 Windows 子系统

转载 作者:行者123 更新时间:2023-12-01 11:44:55 26 4
gpt4 key购买 nike

我正在使用旧的 bcc32 (borland 5.5)(我知道这很旧编译器但不要告诉我我不应该使用它)

我可以使用控制台或 Windows 子系统进行编译。

我不想用 windows 子系统编译,我想要只有 main() 广告的控制台“windows.h”包括(从那里我称我的自己的库打开窗口并处理内部消息泵)

它可以工作,但问题是当我编译时带有控制台子系统的是丑陋的蓝色控制台窗口出现,我不需要那个

所以我想我只需要不需要编译 windows 子系统,没有控制台子系统编译,只是让我的程序以某种原始模式编译(两者都没有控制台创建并且没有 WinMain 入口点 -怎么做?

最佳答案

通常,当您不需要控制台时,您应该选择“GUI”或“Windows”子系统(取决于您的开发环境选择如何调用它)。它控制链接器在 EXE header 中设置的位。您无法在程序开始运行后控制子系统,因为操作系统会读取您的 EXE 文件并在执行程序中的任何代码之前确定要使用的子系统。

使用 Windows 子系统不需要您有任何窗口;它只是在加载程序时告诉操作系统您不需要控制台。它与您是否使用任何 Windows API 无关。这两个子系统都是成熟的 Windows 应用程序,并提供对 Windows API 功能的充分利用。

您可以在 WinMain 中执行与在 main 中相同的所有操作。有 fetching the command line 的功能和 splitting it into separate arguments .

但是,如果您不希望您的主函数被调用 WinMain,那么您就不能使用 Windows 子系统。子系统的选择还控制链接器将哪一组准备代码放入您的程序中。准备代码是程序的真正入口点所在的位置,它是初始化 C++ 标准库并调用具有命名空间范围的任何对象的构造函数的地方。控制台模式中包含的代码调用main(或wmain);为 Windows 子系统调用链接的代码 WinMain(或 wWinMain)。如果您使用 Windows 子系统并且没有定义名为 WinMain 的函数,那么您在链接时会出错;链接器将提示一个未定义的函数。 (您不必包含 windows.h 来定义 WinMain,如果您害怕包含该 header 。)

由于要使用的子系统只是 EXE header 中的一组位,因此您可以在使用 the editbin program 进行链接后更改它。 .链接时,选择控制台子系统,以便获得控制台准备代码和 main,然后修改二进制文件以改为使用 Windows 子系统:

link foo.obj /out foo.exe /subsystem:CONSOLEeditbin /subsystem:WINDOWS foo.exe

然后您的程序将在没有控制台的情况下运行。请注意,如果在启动时出现任何问题,准备代码可能会使您的程序崩溃,因为它编写时希望有一个可用于写入的控制台,但它不会在那里。

关于winapi - bcc32 - 没有控制台子系统,也没有 Windows 子系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16133152/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com