如何在启动用 D 编写的程序时不打开控制台

How to not open a console when starting program written in D

我正在用 D 编写一个应用程序。它是使用 dub 配置(目标类型:可执行文件)使用 ldc2 编译器编译的。编译后的程序创建了一个控制台 window,我不需要它,因为该应用程序使用 GUI 框架。我需要一种方法来防止创建控制台 window.

我所知道的具有类似行为的唯一其他示例是使用 mingw64-gcc 编译 C/C++ 程序时,它有一个 -mwindows 标志。我不知道 D 程序有什么类似的东西。 dub 配置和 ldc 编译器标志似乎都无法满足我的要求。有谁知道该怎么办?甚至另一个编译器也可以工作,只要它至少能满足我的要求。

从 CMD 或 PowerShell 打开应用程序时,不会打开其他控制台。只有当我从 Windows GUI 启动应用程序时才会出现此问题。

dub.json:

{
    description (author etc.)
    "targetType": "executable",
    "platforms": [
        "windows"
    ],
    "dependencies": {
     ....
    },
    "versions" : [
     ....
    ],
    "libs" : [
     ....
    ],
    "dflags": [
        "-m32",
        "-static",
        "-release"
    ]
}

编译命令:

dub run --compiler=ldc2.exe

解决方法:

在dub.json

中添加如下链接器标志
"lflags":[
   "-subsystem:windows",
   "-entry:mainCRTStartup"
]

这会删除程序启动时弹出的控制台,如果该程序不是来自另一个控制台的 运行。它还启用了通常的 d main(void main() 等),不需要 winmain 入口点。 (如果你简单地离开入口标志就可以使用)

您需要添加

"lflags": ["-Subsystem:Windows"]

到您的 dub.json 文件,告诉 ldc 创建一个 Window UI 二进制文件。要使用的命令行选项是 ldc2 -L=-Subsystem:Windows.