2017-08-27 57 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運行時顯然在這裏工作,所以問題解決了,不知何故。不漂亮,但這是什麼窗戶...... 感謝您的幫助! (你的旗子做的伎倆) –