2017-08-27 26 views
1

我写在D.它与LDC2编译器编译,使用配音配置(目标类型:可执行文件)的应用程序时,没有打开控制台。编译后的程序会创建一个控制台窗口,因为应用程序使用GUI框架,所以我不需要该窗口。我需要一种方法来防止创建控制台窗口。如何开始写在d

唯一的其他例子我知道有类似的行为编译具有mingw64-GCC,其具有-mwindows标志C/C++程序时。我不知道类似的D程序。配音配置和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入口点。 (如果你只是离开进入标志的是,可以使用)

+1

在你配音的配置文件,您可以添加一个'“LFLAGS”:“/子系统:窗户”]'选项,它应该这样做。 ...但我不确定这是否适用于ldc2,你可以尝试一下并让我知道吗?具体的语法可能会略有不同,堆栈溢出对我来说可能是''-Wl, - 子系​​统,windows“'。 –

+0

没有工作。我试着配音lflags [/子..]和dflags -L = - 子系​​统=窗口。 –

回答

1

您需要

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

添加到您的dub.json文件告诉LDC创建窗口UI二进制文件。要使用的命令行选项是ldc2 -L=-Subsystem:Windows

+0

现在当我编译我的程序,链接器失败: libcmt.lib(exe_winmain.obj):错误LNK2019:无法解析的外部符号_WinMain @ 16在函数“int __cdecl __scrt_common_main_seh(void)”中引用(?__ scrt_common_main_seh @@ YAHXZ) –

+0

解决这显然是添加WinMain入口点,但在http://forum.dlang.org/post/[email protected]作为解释的那样,d运行时不那么initilialized。 –

+0

复制从dlang Win32示例页面(在dlang论坛帖子所引用)的代码,工作。另外d运行时显然在这里工作,所以问题解决了,不知何故。不漂亮,但这是什么窗户...... 感谢您的帮助! (你的旗子做的伎俩) –