Artifact 3a5fb6fa17d9e24a87064b37f48345cbe94439d7
1 private import win32.ansi.windows;
2
3 // Hack!
4 //
5 // _acrtused_dllが勝手に終了時に標準入出力ハンドルを
6 // 閉じちゃって困るので、その辺りだけは閉じないような
7 // CloseHandleを突っ込んで回避。いいのかこれ。
8
9 extern(Windows)
10 {
11 private alias BOOL function(HANDLE) ClHnT;
12 private ClHnT Real_CloseHandle;
13 private HANDLE stdin;
14 private HANDLE stdout;
15 private HANDLE stderr;
16
17 BOOL CloseHandle( HANDLE h )
18 {
19 if( h==stdin ) return TRUE;
20 if( h==stdout ) return TRUE;
21 if( h==stderr ) return TRUE;
22 return Real_CloseHandle(h);
23 }
24 }
25
26 static this()
27 {
28 Real_CloseHandle = cast(ClHnT)
29 GetProcAddress( GetModuleHandle("kernel32.dll"), "CloseHandle" );
30 stdin = GetStdHandle(STD_INPUT_HANDLE );
31 stdout = GetStdHandle(STD_OUTPUT_HANDLE);
32 stderr = GetStdHandle(STD_ERROR_HANDLE );
33 }