File Annotation

Not logged in
9b639cf2d6 2015-05-05        kinaba: import core.sys.windows.dll;
9b639cf2d6 2015-05-05        kinaba: import core.sys.windows.windows;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: //----------------------------------------------------------------
9b639cf2d6 2015-05-05        kinaba: // おきまりのDLL初期化ルーチン
9b639cf2d6 2015-05-05        kinaba: //----------------------------------------------------------------
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: extern (Windows)
9b639cf2d6 2015-05-05        kinaba: BOOL DllMain( HINSTANCE inst, ULONG reason, void* reserved )
9b639cf2d6 2015-05-05        kinaba: {
9b639cf2d6 2015-05-05        kinaba: 	switch( reason )
9b639cf2d6 2015-05-05        kinaba: 	{
9b639cf2d6 2015-05-05        kinaba: 	case DLL_PROCESS_ATTACH:
9b639cf2d6 2015-05-05        kinaba: 		dll_process_attach( inst, true );
9b639cf2d6 2015-05-05        kinaba: 		break;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: 	case DLL_PROCESS_DETACH:
9b639cf2d6 2015-05-05        kinaba: 		dll_process_detach( inst, true );
9b639cf2d6 2015-05-05        kinaba: 		break;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: 	case DLL_THREAD_ATTACH:
9b639cf2d6 2015-05-05        kinaba: 		dll_thread_attach( true, true );
9b639cf2d6 2015-05-05        kinaba: 		break;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: 	case DLL_THREAD_DETACH:
9b639cf2d6 2015-05-05        kinaba: 		dll_thread_detach( true, true );
9b639cf2d6 2015-05-05        kinaba: 		break;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: 	default:
9b639cf2d6 2015-05-05        kinaba: 	}
9b639cf2d6 2015-05-05        kinaba: 	return true;
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: /*
9b639cf2d6 2015-05-05        kinaba: // Hack!
9b639cf2d6 2015-05-05        kinaba: //
9b639cf2d6 2015-05-05        kinaba: // _acrtused_dllが勝手に終了時に標準入出力ハンドルを
9b639cf2d6 2015-05-05        kinaba: // 閉じちゃって困るので、その辺りだけは閉じないような
9b639cf2d6 2015-05-05        kinaba: // CloseHandleを突っ込んで回避。
9b639cf2d6 2015-05-05        kinaba: //
9b639cf2d6 2015-05-05        kinaba: // dmd v0.99 では動いていたのだけど最近のだとこれを入れると
9b639cf2d6 2015-05-05        kinaba: // 至る所でクラッシュするので考え直す必要がある。
9b639cf2d6 2015-05-05        kinaba: // TODO: bug report.
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: extern(Windows)
9b639cf2d6 2015-05-05        kinaba: {
9b639cf2d6 2015-05-05        kinaba: 	private alias BOOL function(HANDLE) ClHnT;
9b639cf2d6 2015-05-05        kinaba: 	private ClHnT  Real_CloseHandle;
9b639cf2d6 2015-05-05        kinaba: 	private HANDLE stdin;
9b639cf2d6 2015-05-05        kinaba: 	private HANDLE stdout;
9b639cf2d6 2015-05-05        kinaba: 	private HANDLE stderr;
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: 	BOOL CloseHandle( HANDLE h )
9b639cf2d6 2015-05-05        kinaba: 	{
9b639cf2d6 2015-05-05        kinaba: 		if( h==stdin  ) return TRUE;
9b639cf2d6 2015-05-05        kinaba: 		if( h==stdout ) return TRUE;
9b639cf2d6 2015-05-05        kinaba: 		if( h==stderr ) return TRUE;
9b639cf2d6 2015-05-05        kinaba: 		return Real_CloseHandle(h);
9b639cf2d6 2015-05-05        kinaba: 	}
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: 
9b639cf2d6 2015-05-05        kinaba: static this()
9b639cf2d6 2015-05-05        kinaba: {
9b639cf2d6 2015-05-05        kinaba: 	Real_CloseHandle = cast(ClHnT)
9b639cf2d6 2015-05-05        kinaba: 		GetProcAddress( GetModuleHandleA("kernel32.dll"), "CloseHandle" );
9b639cf2d6 2015-05-05        kinaba: 	stdin  = GetStdHandle(STD_INPUT_HANDLE );
9b639cf2d6 2015-05-05        kinaba: 	stdout = GetStdHandle(STD_OUTPUT_HANDLE);
9b639cf2d6 2015-05-05        kinaba: 	stderr = GetStdHandle(STD_ERROR_HANDLE );
9b639cf2d6 2015-05-05        kinaba: }
9b639cf2d6 2015-05-05        kinaba: */