DxLib_Initでの二重起動判定について
以下のようなプログラムを書くと、大体DxLib_Init2~5回目に失敗してしまいます。
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode(TRUE);
while(1){
if(DxLib_Init() < 0){
break;
}
DxLib_End();
}
MessageBoxA(NULL,"DxLib_Initが失敗した","",0);
return 0;
}
以下にログを書いておきます(DxLib_Init3回分なので長いですが)
0:システムの情報を出力します
2: DXライブラリ Ver3.04d
3: 論理プロセッサの数 : 4
5: OS Windows7 ( Build 7600 )
106: CPU動作速度:大体3.17GHz
108: MMX命令を使用します
109: SSE命令が使用可能です
111: SSE2命令が使用可能です
113: CPUベンダ:GenuineIntel
119: CPU名:Intel(R) Core(TM) i5 CPU 650 @ 3.20GHz
'Game.exe': 'C:\Windows\System32\dwmapi.dll' を読み込みました。Cannot find or open the PDB file
123:COMの初期化... 'Game.exe': 'C:\Windows\System32\cryptbase.dll' を読み込みました。Cannot find or open the PDB file
'Game.exe': 'C:\Windows\System32\uxtheme.dll' を読み込みました。Cannot find or open the PDB file
成功しました
139:メモリ総量:2999.12MB 空きメモリ領域:1077.66MB
1077.66MB
141:タイマーの精度を検査します
143:精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60
144: パフォーマンスカウンターを使用します タイマー分解能 : 3117.226000 KHz
147: ソフトの二重起動検査... 二重起動はされていませんでした
151:ウインドウクラスを登録します... 登録に成功しました
155:ウインドウモード起動用のウインドウを作成します
190:ウインドウの作成に成功しました
282:IMEを無効にしました
286:ウインドウスタイルをウインドウモード用に変更します... 完了
290:DirectInput関係初期化処理
291: DirectInput7 の取得中... 'Game.exe': 'C:\Windows\System32\dinput.dll' を読み込みました。Cannot find or open the PDB file
成功
323: 引き続き初期化処理... 初期化成功
331: ジョイパッドの初期化...
335: ジョイパッドの初期化は正常に終了しました
338: マウスデバイスの初期化... 初期化成功
340: キーボードデバイスの初期化... 初期化成功
344:DirectInput 関連の初期化は正常に終了しました
346:DirectSound の初期化を行います
347:DirectSound インターフェースの取得を行います.... 'Game.exe': 'C:\Windows\System32\dsound.dll' を読み込みました。Cannot find or open the PDB file
成功
371:引き続きインターフェースの初期化処理... 'Game.exe': 'C:\Windows\System32\MMDevAPI.dll' を読み込みました。Cannot find or open the PDB file
成功
424: DirectSound デバイスを列挙します
427: モジュール名: ドライバ記述:プライマリ サウンド ドライバー
429: モジュール名:{0.0.0.00000000}.{bf53e930-06e7-494c-af28-cdabcd205168} ドライバ記述:スピーカー (High Definition Audio デバイス)
431: モジュール名:{0.0.0.00000000}.{4c12de59-d645-4b2d-acce-102c6c85d916} ドライバ記述:デジタル オーディオ (S/PDIF) (High Definition Audio デバイス)
433: 最大サンプリングレート:200.00KHz 最小サンプリングレート:0.10KHz
435: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB
436: 利用可能サンプリング精度
438: プライマリ 16bit = OK 8bit = OK
440: セカンダリ 16bit = OK 8bit = OK
441: 利用可能チャンネル
443: プライマリ MONO = OK STEREO = OK
444: セカンダリ MONO = OK STEREO = OK
446:DirectSound の初期化は正常に終了しました
452:DirectDraw オブジェクトの取得を行います.... 'Game.exe': 'C:\Windows\System32\ddraw.dll' を読み込みました。Cannot find or open the PDB file
成功
461:引き続き初期化処理... 'Game.exe': 'C:\Windows\System32\igdumdx32.dll' を読み込みました。Cannot find or open the PDB file
初期化に成功しました
516:IDirect3D9Ex オブジェクトを取得します.... 成功
521:IDirect3DDevice9Ex オブジェクトを取得します.... ハードウエア頂点演算を使用します
790:成功
792:Driver:igdumdx32.dll Description:Intel(R) HD Graphics
794:画面のフォーマットは D3DFMT_X8R8G8B8 です
795:Zバッファのフォーマットは D3DFMT_D16 です
797:16bit カラーフォーマットは D_D3DFMT_R5G6B5 です
798:32bit カラーフォーマットは D_D3DFMT_X8R8G8B8 です
799:アルファ付き 16bit カラーフォーマットは D_D3DFMT_A4R4G4B4 です
801:アルファ付き 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です
803:アルファテスト用 16bit カラーフォーマットは D_D3DFMT_A1R5G5B5 です
804:アルファテスト用 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です
807:DXT1テクスチャフォーマットは D_D3DFMT_DXT1 です
809:DXT2テクスチャフォーマットは D_D3DFMT_DXT2 です
810:DXT3テクスチャフォーマットは D_D3DFMT_DXT3 です
813:DXT4テクスチャフォーマットは D_D3DFMT_DXT4 です
815:DXT5テクスチャフォーマットは D_D3DFMT_DXT5 です
817:描画用 16bit カラーフォーマットは D_D3DFMT_R5G6B5 です
818:描画用 32bit カラーフォーマットは D_D3DFMT_X8R8G8B8 です
820:描画用アルファ付き 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です
847:バックバッファロック転送の時間:5086nsec 一時的な描画可能バッファを使用した転送の時間:1120nsec
850:バックバッファロックを使用しません
851:Zバッファを作成します.... 成功
862:プログラマブルシェーダーを使用します
926:フォントの初期化を行います
933:フォントの初期化は正常に終了しました
936:文字コードバッファの初期化を行います... 完了しました
947:フォントの初期化を行います
950:フォントの初期化は正常に終了しました
1001:DirectInput 関連の終了処理... 完了
1064:DirectSound の終了処理は正常に終了しました
1068:ウインドウを閉じようとしています
1074:ウインドウが破棄されようとしています
1080:ソフトを終了する準備が整いました
1110:
1112:Alloc memory dump
1113: Total size:0(0.000kb) Alloc num:0
1114:
0:システムの情報を出力します
1: DXライブラリ Ver3.04d
2: 論理プロセッサの数 : 4
3: OS Windows7 ( Build 7600 )
105: CPU動作速度:大体3.16GHz
107: MMX命令を使用します
108: SSE命令が使用可能です
109: SSE2命令が使用可能です
111: CPUベンダ:GenuineIntel
116: CPU名:Intel(R) Core(TM) i5 CPU 650 @ 3.20GHz
118:COMの初期化... 成功しました
120:メモリ総量:2999.12MB 空きメモリ領域:1072.52MB
1072.52MB
124:タイマーの精度を検査します
125:精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60
128: パフォーマンスカウンターを使用します タイマー分解能 : 3117.226074 KHz
130: ソフトの二重起動検査... 二重起動はされていませんでした
135:ウインドウクラスを登録します... 登録に成功しました
139:ウインドウモード起動用のウインドウを作成します
141:ウインドウの作成に成功しました
154:IMEを無効にしました
157:ウインドウスタイルをウインドウモード用に変更します... 完了
160:DirectInput関係初期化処理
161: DirectInput7 の取得中... 成功
163: 引き続き初期化処理... 初期化成功
167: ジョイパッドの初期化...
170: ジョイパッドの初期化は正常に終了しました
172: マウスデバイスの初期化... 初期化成功
175: キーボードデバイスの初期化... 初期化成功
178:DirectInput 関連の初期化は正常に終了しました
180:DirectSound の初期化を行います
181:DirectSound インターフェースの取得を行います.... 成功
184:引き続きインターフェースの初期化処理... 成功
212: DirectSound デバイスを列挙します
'Game.exe': 'C:\Windows\System32\avrt.dll' を読み込みました。Cannot find or open the PDB file
215: モジュール名: ドライバ記述:プライマリ サウンド ドライバー
217: モジュール名:{0.0.0.00000000}.{bf53e930-06e7-494c-af28-cdabcd205168} ドライバ記述:スピーカー (High Definition Audio デバイス)
219: モジュール名:{0.0.0.00000000}.{4c12de59-d645-4b2d-acce-102c6c85d916} ドライバ記述:デジタル オーディオ (S/PDIF) (High Definition Audio デバイス)
221: 最大サンプリングレート:200.00KHz 最小サンプリングレート:0.10KHz
223: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB
225: 利用可能サンプリング精度
226: プライマリ 16bit = OK 8bit = OK
228: セカンダリ 16bit = OK 8bit = OK
230: 利用可能チャンネル
231: プライマリ MONO = OK STEREO = OK
238: セカンダリ MONO = OK STEREO = OK
240:DirectSound の初期化は正常に終了しました
245:DirectDraw オブジェクトの取得を行います.... 成功
初期化に成功しました
297:IDirect3D9Ex オブジェクトを取得します.... 成功
302:IDirect3DDevice9Ex オブジェクトを取得します.... ハードウエア頂点演算を使用します
573:成功
577:Driver:igdumdx32.dll Description:Intel(R) HD Graphics
581:画面のフォーマットは D3DFMT_X8R8G8B8 です
584:Zバッファのフォーマットは D3DFMT_D16 です
587:16bit カラーフォーマットは D_D3DFMT_R5G6B5 です
590:32bit カラーフォーマットは D_D3DFMT_X8R8G8B8 です
592:アルファ付き 16bit カラーフォーマットは D_D3DFMT_A4R4G4B4 です
594:アルファ付き 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です
595:アルファテスト用 16bit カラーフォーマットは D_D3DFMT_A1R5G5B5 です
597:アルファテスト用 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です
599:DXT1テクスチャフォーマットは D_D3DFMT_DXT1 です
600:DXT2テクスチャフォーマットは D_D3DFMT_DXT2 です
602:DXT3テクスチャフォーマットは D_D3DFMT_DXT3 です
603:DXT4テクスチャフォーマットは D_D3DFMT_DXT4 です
605:DXT5テクスチャフォーマットは D_D3DFMT_DXT5 です
607:描画用 16bit カラーフォーマットは D_D3DFMT_R5G6B5 です
608:描画用 32bit カラーフォーマットは D_D3DFMT_X8R8G8B8 です
610:描画用アルファ付き 32bit カラーフォーマットは D_D3DFMT_A8R8G8B8 です
637:バックバッファロック転送の時間:4881nsec 一時的な描画可能バッファを使用した転送の時間:935nsec
638:バックバッファロックを使用しません
640:Zバッファを作成します.... 成功
650:プログラマブルシェーダーを使用します
719:フォントの初期化を行います
723:フォントの初期化は正常に終了しました
725:文字コードバッファの初期化を行います... 完了しました
734:フォントの初期化を行います
737:フォントの初期化は正常に終了しました
761:DirectInput 関連の終了処理... 完了
775:DirectSound の終了処理は正常に終了しました
778:
780:Alloc memory dump
781: Total size:0(0.000kb) Alloc num:0
783:
0:システムの情報を出力します
2: DXライブラリ Ver3.04d
3: 論理プロセッサの数 : 4
4: OS Windows7 ( Build 7600 )
106: CPU動作速度:大体3.16GHz
108: MMX命令を使用します
120: SSE命令が使用可能です
126: SSE2命令が使用可能です
129: CPUベンダ:GenuineIntel
139: CPU名:Intel(R) Core(TM) i5 CPU 650 @ 3.20GHz
141:COMの初期化... 成功しました
144:メモリ総量:2999.12MB 空きメモリ領域:1072.88MB
1072.88MB
146:タイマーの精度を検査します
147:精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60
148: パフォーマンスカウンターを使用します タイマー分解能 : 3117.226074 KHz
150: ソフトの二重起動検査... 二重起動されています、ソフトを終了します
157:ウインドウを閉じようとしています
DxLib_Endの2回目の呼び出しではウィンドウを閉じられておらず
DxLib_Init内では二重起動の判定にFindWindowを使用しているようなので、二重起動していると怒られているようです。
そもそもひとつのプロセスで何回もInitとEndを呼んではいけないのでしょうか?