Artifact Content

Not logged in

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  }