Artifact Content

Not logged in

Artifact 3a5fb6fa17d9e24a87064b37f48345cbe94439d7


private import win32.ansi.windows;

// Hack!
//
// _acrtused_dllが勝手に終了時に標準入出力ハンドルを
// 閉じちゃって困るので、その辺りだけは閉じないような
// CloseHandleを突っ込んで回避。いいのかこれ。

extern(Windows)
{
	private alias BOOL function(HANDLE) ClHnT;
	private ClHnT  Real_CloseHandle;
	private HANDLE stdin;
	private HANDLE stdout;
	private HANDLE stderr;

	BOOL CloseHandle( HANDLE h )
	{
		if( h==stdin  ) return TRUE;
		if( h==stdout ) return TRUE;
		if( h==stderr ) return TRUE;
		return Real_CloseHandle(h);
	}
}

static this()
{
	Real_CloseHandle = cast(ClHnT)
		GetProcAddress( GetModuleHandle("kernel32.dll"), "CloseHandle" );
	stdin  = GetStdHandle(STD_INPUT_HANDLE );
	stdout = GetStdHandle(STD_OUTPUT_HANDLE);
	stderr = GetStdHandle(STD_ERROR_HANDLE );
}