Improve this page
		
	        Github へのログインが必要です。
			簡単な修正は、ここから fork、オンライン編集、pull request ができます。
			大きな修正については、
			通常の clone で行って下さい。
		
	
	
		Page wiki
		
	        関連するWikiページを参照・編集
		
	
	
		English
		
	        このページの英語版(原文)
		
	
  Windowsプログラミング
このページは、Windows上でのDの実装に関して述べています。 当然ながら、 Windows特有のDの機能は他のプラットフォームでは使用できません。
Cの:
#include <windows.h>
	の代わりに、Dでは以下を使用します:
import core.sys.windows.windows;
呼び出し規約
Cでは、Windows APIの呼び出し規約は __stdcall です。 Dでは単純に:
extern (Windows)
{
	/* ... 関数宣言 ... */
}
	リンク属性Windowsによって、呼び出し規約と名前のmanglingの両方が、 Windowsと互換性のあるものになります。
Cで __declspec(dllimport) や __declspec(dllexport) と書いていたものについては、export 属性を使ってください:
export void func(int foo);
	関数本体がなければ、importされます。 関数本体があれば、exportされます。
Windows 実行ファイル
Windows GUI アプリケーションを D で書くことができます。 サンプルは \samples\d\winsamp.d などに幾つかあります。
以下が注意点です:
- エントリポイントとして、main 関数ではなく WinMain 関数が必要です。
 - WinMain の内容は以下の通りです:
import core.runtime; import core.sys.windows.windows; import std.string; extern (Windows) int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { int result; void exceptionHandler(Throwable e) { throw e; } try { Runtime.initialize(&exceptionHandler); result = myWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow); Runtime.terminate(&exceptionHandler); } catch (Throwable e) // キャッチされていない例外を全てキャッチ { MessageBoxA(null, e.toString().toStringz(), "Error", MB_OK | MB_ICONEXCLAMATION); result = 0; // 失敗 } return result; } int myWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // ... ユーザーコードをここに挿入 ... return 0; }myWinMain() 関数が、ユーザのコードを書くところです。 WinMain 関数の残りは全て、Dの実行時システムの初期化と終了の 決まり文句です。 - 最低次の2行を含んだ、
	.def
	(モジュール定義ファイル)
	が必要です:
EXETYPE NT SUBSYSTEM WINDOWSこれがないと、Win32は、アプリケーションの実行時に 常にコンソールウインドウを開こうとします。 - WinMain() の存在はコンパイラが認識し、 __acrtused_dll と phobos.lib ランタイムライブラリへの参照を自動的に追加します。
 
		D Programming Language