OSDN Git Service

rev154(Direct3D9Ex対応)の続き。
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / 全体 / Program.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Globalization;\r
4 using System.Text;\r
5 using System.Runtime.InteropServices;\r
6 using System.Threading;\r
7 using System.Diagnostics;\r
8 using System.Windows.Forms;\r
9 using FDK;\r
10 \r
11 namespace DTXMania\r
12 {\r
13         internal class Program\r
14         {\r
15                 #region [ 二重機動チェック、DLL存在チェック ]\r
16                 //-----------------------------\r
17                 private static Mutex mutex二重起動防止用;\r
18 \r
19                 private static bool tDLLの存在チェック( string strDll名, string str存在しないときに表示するエラー文字列jp, string str存在しないときに表示するエラー文字列en )\r
20                 {\r
21                         string str存在しないときに表示するエラー文字列 = (CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "ja") ?\r
22                                 str存在しないときに表示するエラー文字列jp : str存在しないときに表示するエラー文字列en;\r
23                         IntPtr hModule = LoadLibrary( strDll名 );\r
24                         if( hModule == IntPtr.Zero )\r
25                         {\r
26                                 MessageBox.Show( str存在しないときに表示するエラー文字列, "DTXMania runtime error", MessageBoxButtons.OK, MessageBoxIcon.Hand );\r
27                                 return false;\r
28                         }\r
29                         FreeLibrary( hModule );\r
30                         return true;\r
31                 }\r
32 \r
33                 #region [DllImport]\r
34                 [DllImport( "kernel32", CharSet = CharSet.Unicode, SetLastError = true )]\r
35                 internal static extern void FreeLibrary( IntPtr hModule );\r
36 \r
37                 [DllImport( "kernel32", CharSet = CharSet.Unicode, SetLastError = true )]\r
38                 internal static extern IntPtr LoadLibrary( string lpFileName );\r
39                 #endregion\r
40                 //-----------------------------\r
41                 #endregion\r
42 \r
43                 [STAThread]\r
44                 private static void Main()\r
45                 {\r
46                         mutex二重起動防止用 = new Mutex( false, "DTXManiaMutex" );\r
47 \r
48                         if( mutex二重起動防止用.WaitOne( 0, false ) )\r
49                         {\r
50                                 string newLine = Environment.NewLine;\r
51                                 bool flag = false;\r
52 \r
53                                 #region [DLLの存在チェック]\r
54                                 if (!tDLLの存在チェック("SlimDX" + CDTXMania.SLIMDXDLL,\r
55                                         "SlimDX" + CDTXMania.SLIMDXDLL + ".dll またはその依存するdllが存在しません。" + newLine + "DTXManiaをダウンロードしなおしてください。",\r
56                                         "SlimDX" + CDTXMania.SLIMDXDLL + ".dll, or its depended DLL, is not found." + newLine + "Please download DTXMania again."\r
57                                         )) flag = true;\r
58                                 if (!tDLLの存在チェック("FDK.dll",\r
59                                         "FDK.dll またはその依存するdllが存在しません。" + newLine + "DTXManiaをダウンロードしなおしてください。",\r
60                                         "FDK.dll, or its depended DLL, is not found." + newLine + "Please download DTXMania again."\r
61                                         ) ) flag = true;\r
62                                 if( !tDLLの存在チェック( "xadec.dll",\r
63                                         "xadec.dll が存在しません。" + newLine + "DTXManiaをダウンロードしなおしてください。",\r
64                                         "xadec.dll is not found." + newLine + "Please download DTXMania again."\r
65                                         ) ) flag = true;\r
66                                 if( !tDLLの存在チェック( "SoundDecoder.dll",\r
67                                         "SoundDecoder.dll またはその依存するdllが存在しません。" + newLine + "DTXManiaをダウンロードしなおしてください。",\r
68                                         "SoundDecoder.dll, or its depended DLL, is not found." + newLine + "Please download DTXMania again."\r
69                                         ) ) flag = true;\r
70                                 if (!tDLLの存在チェック(CDTXMania.D3DXDLL,\r
71                                         CDTXMania.D3DXDLL + " が存在しません。" + newLine + "DirectX Redist フォルダの DXSETUP.exe を実行し、" + newLine + "必要な DirectX ランタイムをインストールしてください。",\r
72                                         CDTXMania.D3DXDLL + " is not found." + newLine + "Please execute DXSETUP.exe in \"DirectX Redist\" folder, to install DirectX runtimes required for DTXMania."\r
73                                         )) flag = true;\r
74                                 #endregion\r
75                                 if (!flag)\r
76                                 {\r
77 #if DEBUG && TEST_ENGLISH\r
78                                         Thread.CurrentThread.CurrentCulture = new CultureInfo( "en-US" );\r
79 #endif\r
80 \r
81                                         DWM.EnableComposition(false);   // Disable AeroGrass temporally\r
82 \r
83                                         // BEGIN #23670 2010.11.13 from: キャッチされない例外は放出せずに、ログに詳細を出力する。\r
84                                         // BEGIM #24606 2011.03.08 from: DEBUG 時は例外発生箇所を直接デバッグできるようにするため、例外をキャッチしないようにする。\r
85 #if !DEBUG\r
86                                         try\r
87 #endif\r
88                                         {\r
89                                                 using( var mania = new CDTXMania() )\r
90                                                         mania.Run();\r
91 \r
92                                                 Trace.WriteLine( "" );\r
93                                                 Trace.WriteLine( "遊んでくれてありがとう!" );\r
94                                         }\r
95 #if !DEBUG\r
96                                         catch( Exception e )\r
97                                         {\r
98                                                 Trace.WriteLine( "" );\r
99                                                 Trace.Write( e.ToString() );\r
100                                                 Trace.WriteLine( "" );\r
101                                                 Trace.WriteLine( "エラーだゴメン!(涙" );\r
102                                                 MessageBox.Show( e.ToString(), "DTXMania Error", MessageBoxButtons.OK, MessageBoxIcon.Error );  // #23670 2011.2.28 yyagi to show error dialog\r
103                                         }\r
104 #endif\r
105                                         // END #24606 2011.03.08 from\r
106                                         // END #23670 2010.11.13 from\r
107 \r
108                                         if( Trace.Listeners.Count > 1 )\r
109                                                 Trace.Listeners.RemoveAt( 1 );\r
110                                 }\r
111 \r
112                                 // BEGIN #24615 2011.03.09 from: Mutex.WaitOne() が true を返した場合は、Mutex のリリースが必要である。\r
113                                 \r
114                                 mutex二重起動防止用.ReleaseMutex();\r
115                                 mutex二重起動防止用 = null;\r
116                                 \r
117                                 // END #24615 2011.03.09 from\r
118                         }\r
119                 }\r
120         }\r
121 }\r