4e2933c620 2015-04-21 kinaba: private import core.sys.windows.windows; c2b7a98c21 2011-02-23 kinaba: c2b7a98c21 2011-02-23 kinaba: // Hack! c2b7a98c21 2011-02-23 kinaba: // c2b7a98c21 2011-02-23 kinaba: // _acrtused_dllが勝手に終了時に標準入出力ハンドルを c2b7a98c21 2011-02-23 kinaba: // 閉じちゃって困るので、その辺りだけは閉じないような c2b7a98c21 2011-02-23 kinaba: // CloseHandleを突っ込んで回避。いいのかこれ。 c2b7a98c21 2011-02-23 kinaba: c2b7a98c21 2011-02-23 kinaba: extern(Windows) c2b7a98c21 2011-02-23 kinaba: { c2b7a98c21 2011-02-23 kinaba: private alias BOOL function(HANDLE) ClHnT; c2b7a98c21 2011-02-23 kinaba: private ClHnT Real_CloseHandle; c2b7a98c21 2011-02-23 kinaba: private HANDLE stdin; c2b7a98c21 2011-02-23 kinaba: private HANDLE stdout; c2b7a98c21 2011-02-23 kinaba: private HANDLE stderr; c2b7a98c21 2011-02-23 kinaba: c2b7a98c21 2011-02-23 kinaba: BOOL CloseHandle( HANDLE h ) c2b7a98c21 2011-02-23 kinaba: { c2b7a98c21 2011-02-23 kinaba: if( h==stdin ) return TRUE; c2b7a98c21 2011-02-23 kinaba: if( h==stdout ) return TRUE; c2b7a98c21 2011-02-23 kinaba: if( h==stderr ) return TRUE; c2b7a98c21 2011-02-23 kinaba: return Real_CloseHandle(h); c2b7a98c21 2011-02-23 kinaba: } c2b7a98c21 2011-02-23 kinaba: } c2b7a98c21 2011-02-23 kinaba: c2b7a98c21 2011-02-23 kinaba: static this() c2b7a98c21 2011-02-23 kinaba: { c2b7a98c21 2011-02-23 kinaba: Real_CloseHandle = cast(ClHnT) 4e2933c620 2015-04-21 kinaba: GetProcAddress( GetModuleHandleA("kernel32.dll"), "CloseHandle" ); c2b7a98c21 2011-02-23 kinaba: stdin = GetStdHandle(STD_INPUT_HANDLE ); c2b7a98c21 2011-02-23 kinaba: stdout = GetStdHandle(STD_OUTPUT_HANDLE); c2b7a98c21 2011-02-23 kinaba: stderr = GetStdHandle(STD_ERROR_HANDLE ); c2b7a98c21 2011-02-23 kinaba: }