トップページ > 記事閲覧
C#版で二重起動フラグに関係なく二重起動し、FALSEだと強制終了する
名前:まるもり 日時: 2022/09/15 02:26

ゲームを作成していたところ偶然発生したエラー?です C版などに触れていないので、これが正しい動作かわかりませんが報告します。 DX.SetDoubleStartValidFlag(DX.TRUE); 強制終了せずに、ゲームループ内の描画が行われます。 ログには一つだけ起動したのと変わらない(はず)のメッセージが出力されます。 DX.SetDoubleStartValidFlag(DX.FALSE); ウィンドウは表示されず、例外が発生して強制終了します。 FALSEの場合のログです235が最後です 0:ChangeWindowMode実行 0:ウインドウモードフラグが立てられました 7:DXライブラリの初期化処理開始 11: システムの情報を出力します 12: DXライブラリ Ver3.23 13: 論理プロセッサの数 : 16 13: OS Windows11 ( Build 22000 ) 114: 現時点のCPU動作速度:大体1.79GHz 114: MMX命令を使用します 115: SSE命令が使用可能です 115: SSE2命令が使用可能です 116: CPUベンダ:AuthenticAMD 119: CPU名:AMD Ryzen 7 5700U with Radeon Graphics 120: COMの初期化... 失敗 156: 非同期読み込み処理の初期化...成功 158: ファイルアクセス処理の初期化...成功 160: メモリ総量:15680.00MB 空きメモリ領域:2857.64MB 161: タイマーの精度を検査します 162: 精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60 162: パフォーマンスカウンターを使用します タイマー精度 : 10000.000000 KHz 164: ソフトの二重起動検査... 二重起動されています、ソフトを終了します 169:DXライブラリの初期化処理失敗 172:DirectInput関係初期化処理 172: XInput DLL の読み込み中... 成功 176: DirectInput8 の取得を試みます...成功 198: 引き続き初期化処理... 初期化成功 200: ジョイパッドの初期化... 201: XInput 対応コントローラーのチェックを開始します 201: XInput 対応コントローラー No.0 をチェック 202: XInput 対応コントローラー No.0 の接続は確認できませんでした 202: XInput 対応コントローラー No.1 をチェック 203: XInput 対応コントローラー No.1 の接続は確認できませんでした 204: XInput 対応コントローラー No.2 をチェック 204: XInput 対応コントローラー No.2 の接続は確認できませんでした 204: XInput 対応コントローラー No.3 をチェック 205: XInput 対応コントローラー No.3 の接続は確認できませんでした 206: XInput 対応コントローラーのチェック完了 206: DirectInput 対応ジョイパッドの列挙を開始します 223: DirectInput 対応ジョイパッドの列挙終了 223: ジョイパッドの初期化は正常に終了しました 224: マウスデバイスの初期化... 初期化成功 225: キーボードデバイスの初期化... 初期化成功 235:DirectInput 関連の初期化は正常に終了しました 例外内容 Fatal error. System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt. Repeat 2 times: -------------------------------- at DxLibDLL.DX.dx_ClearDrawScreen_x64(RECT ByRef) -------------------------------- at DxLibDLL.DX.ClearDrawScreen() at 自分で書いたdxライブラリ関数呼び出し元
メンテ

Page: 1 |

Re: C#版で二重起動フラグに関係なく二重起動し、FALSEだと強制終了する ( No.1 )
名前:管理人 日時:2022/09/17 05:20

二重起動を検出すると DxLib_Init は -1 を返しますが、自動ではソフトを終了しませんので DxLib_Init の戻り値が -1 だった場合は if文で分岐してソフトを終了するようにコードを組む必要があります ---------------- // DxLib_Init の戻り値が -1 だったらソフトを終了する例 // ( if文で戻り値がマイナスの値だったら return で関数を抜ける ) if( DX.DxLib_Init() < 0 ) { return; } ---------------- // DxLib_Init の戻り値が -1 でもソフトが終了しない例 // ( DxLib_Init の戻り値を見ていない ) DX.DxLib_Init(); ---------------- DxLib_Init の戻り値が -1 でもソフトを終了しないようなプログラムになっていましたら DxLib_Init の戻り値が -1 だった場合はソフトを終了するようにしてみてください
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存