2017-08-27 9 views
1

私はアプリケーションをDに書いています。ダブ設定(ターゲットタイプ:実行可能)を使用してldc2コンパイラでコンパイルされています。コンパイルされたプログラムは、アプリケーションがGUIフレームワークを使用しているので、私は必要ないコンソールウィンドウを作成します。コンソールウィンドウを作成しないようにする方法が必要です。Dで書かれたプログラムを起動するときにコンソールを開かない方法

同様の動作と私が知っている唯一の他の例は-mwindowsフラグを有しているにMinGW64-GCCと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メイン(void main()など)、winmainのエントリポイントの必要性を有効にします。 (あなたは、単にエントリフラグを残す場合には使用することができます)

+1

ダブ設定ファイルに、 '' lflags ':["/ subsystem:windows"] 'オプションを追加することができます。 ...しかし、私はldc2でうまくいくかどうかは分かりません。試してみてください。具体的な構文は多少異なるかもしれませんが、スタックオーバーフローは私には '' -Wl、 - subsystem、windows "でもあるかもしれません。 –

+0

は機能しませんでした。私はdub lflags [/ sub ..]とdflags -L = - サブシステム= windowsを試しました。 –

答えて

1

あなたは、ウィンドウのUIのバイナリを作成するために、LDCを伝えるためにあなたのdub.jsonファイルに

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

を追加する必要があります。使用するコマンドラインオプションはldc2 -L=-Subsystem:Windowsです。

+0

libcmt.lib(exe_winmain.obj):エラーLNK2019:関数 "int __cdecl __scrt_common_main_seh(void)"で参照される未解決の外部シンボル_WinMain @ 16(?__ scrt_common_main_seh @@ YAHXZ) –

+0

その解決策は明らかにwinmainエントリポイントを追加することですが、http://forum.dlang.org/post/[email protected]で説明されているように、dランタイムは初期化されません。 –

+0

dlang win32のサンプルページ(dlangフォーラムのポストで参照)からコードをコピーしています。また、dランタイムは明らかにここで動作しますので、何とか問題は解決しました。かなりではありませんが、それは窓が何であるかです.... 助けてくれてありがとう! –

関連する問題