Как не открывать консоль при запуске программы, написанной на D

Я пишу приложение на D. Оно скомпилировано с помощью компилятора ldc2 с использованием конфигурации dub (тип цели: исполняемый). Скомпилированная программа создает консольное окно, которое мне не нужно, так как приложение использует графический интерфейс. Мне нужен способ предотвратить создание окна консоли.

Единственный другой пример, который я знаю с похожим поведением, - это компиляция программ на C/C++ с помощью mingw64-gcc, который имеет флаг -mwindows. Я не знаю ничего подобного для программ D. Кажется, что ни конфигурация даба, ни флаги компилятора ldc не делают то, что я хочу. Кто-нибудь знает что делать? Даже другой компилятор может работать, если он, по крайней мере, делает то, что я хочу.

Когда приложение открывается из CMD или PowerShell, дополнительная консоль не открывается. Проблема возникает только при запуске приложения из графического интерфейса Windows.

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. (это можно использовать, если вы просто не указали флаг входа)

1 ответ

Решение

Вам нужно добавить

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

на ваш dub.json файл, чтобы сказать ldc, чтобы создать двоичный файл Window UI. Параметр командной строки для использования ldc2 -L=-Subsystem:Windows,

Другие вопросы по тегам