File Annotation

Not logged in
c2b7a98c21 2011-02-23        kinaba: private import win32.ansi.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)
c2b7a98c21 2011-02-23        kinaba: 		GetProcAddress( GetModuleHandle("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: }