トップページ > 過去ログ > 記事閲覧
タスク切換時の画像復帰
名前:SweetBlack 日時: 2007/01/17 17:44

いつもお世話になります。 順調にゲーム製作を続けていたのですが、 ふと「ALT+TAB」によるタスク切換を試していなかった事を思い出し、試してみたところ、妙な現象がおきました。 一度ALT+TABで処理を切り換え、復帰させてみたところ 一部のキャラクタが表示されなくなってしまったのです。 全てではなく、一部のキャラのみでしたので、 色々と調べていたところ、どうやら CreateGraphFromMem で作成したグラフィックデータを DerivationGraph で切り出して作成したキャラが 表示されなくなっている事に気づきました。 普通にLoadGraphで作成し、DerivationGraphで切り出した場合は 正常に表示される事を確認しましたので、 問題はCreateGraphFromMemの方ではないかと結論づけました。 この現象を回避する方法はありますでしょうか?

Page: 1 | 2 |

Re: タスク切換時の画像復帰 ( No.16 )
名前:SweetBlack 日時:2007/01/30 19:57

管理人様。 何度もお手間を取らせて申し訳ありません。 さて、修正したバージョンを試させていただきました。 結論から申しますと、うまくいきませんでした。 確かに、前述しましたテストプログラムにて 何度かタスク切り替えを試してみたところ、 一度も強制終了はしませんでした。 そこで、今製作中のソフトに組み込んで 試してみると、数回のタスク切り替えで アプリケーションエラーが発生するのです。 先ほどまでの「強制終了」は 何もメッセージなしに突然終了する、というものでしたが、今回のは 「アプリケーションエラー  エラーが発生したため○○.exeを終了します。プログラムを  もう一度開始する必要があります。  エラーログを作成しています。」 というウィンドウが表示されて落ちるようになりました。 発生条件は今のところ絞り込めていませんが、 取り急ぎご報告させていただきます。 念の為、ログを載せておきます。 //--------------------------ここから 0:システムの情報を出力します 16: DXライブラリ Ver2.23 16: OS Windows2000 ( Build 2195 Service Pack 4 ) 116: CPU動作速度:大体1.36GHz 117: MMX命令を使用します 118: CPUベンダ:AuthenticAMD 121: CPU名:AMD Athlon(tm) 64 Processor 3000+ 124:COMの初期化... 成功しました 128:メモリ総量:2047.23MB 空きメモリ領域:1708.57MB 129:タイマーの精度を検査します 130:精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60 131: パフォーマンスカウンターを使用します タイマー分解能 : 3579.545000 KHz 133: ソフトの二重起動検査... 二重起動はされていませんでした 136:ウインドウクラスを登録します... 登録に成功しました 138:フルスクリーンモード用のウインドウを作成します 151:カーソルを不可視にしました 152:IMEを無効にしました 354:DirectInput関係初期化処理 355: DirectInput7 の取得中... 成功 367: 引き続き初期化処理... 初期化成功 369: ジョイパッドの初期化... 375: 入力装置を見つけました 378: デバイスの登録名:Rumble Pad 379: デバイスの製品登録名:Rumble Pad 380: 周期的エフェクトの作成に失敗しました。 381: ジョイパッドの追加は正常に終了しました 382: ジョイパッドの初期化は正常に終了しました 383: マウスデバイスの初期化... 初期化成功 386: キーボードデバイスの初期化... 初期化成功 388:DirectInput 関連の初期化は正常に終了しました 389:DirectSound の初期化を行います 390:DirectSound インターフェースの取得を行います.... 成功 393:引き続きインターフェースの初期化処理... 成功 466: DirectSound デバイスを列挙します 467: モジュール名: ドライバ記述:プライマリ サウンド ドライバ 469: モジュール名: ctaud2k.sys ドライバ記述:SB Live! オーディオ [A000] 470: 最大サンプリングレート:192.00KHz 最小サンプリングレート:4.00KHz 471: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB 472: 利用可能サンプリング精度 473: プライマリ 16bit = OK 8bit = OK 474: セカンダリ 16bit = OK 8bit = OK 475: 利用可能チャンネル 476: プライマリ MONO = OK STEREO = OK 477: セカンダリ MONO = OK STEREO = OK 478:DirectSound の初期化は正常に終了しました 479:DirectDraw 関連の初期化を行います 481: DirectDraw オブジェクトの取得を行います.... 成功 485: 引き続き初期化処理... 初期化に成功しました 488: ビデオカードの情報 490: 画面モード変更処理を開始します 551: ウインドウスタイルをフルスクリーンモード用に変更します... 完了 554: 画面モードの変更処理を開始します 640 x 480 16 bit 556: 画面解像度を変更します... 成功しました 692: 画面モードの変更は正常に終了しました 698: カラー情報 703: A:00000000 B:0000f800 G:000007e0 B:0000001f 717: 出力画面用の DirectDrawSurface を作成します 791: 各スクリーンメモリの配置位置 798: PrimaryBuffer : VIDEOMEMORY 804: BaskBuffer : VIDEOMEMORY 809: 出力画面用の DirectDrawSurface の作成は正常に終了しました 824: Direct3D 関連の初期化を行います 869: Direct3Dオブジェクトを取得します 964: Direct3Dオブジェクトを取得しました 967: 3Dデバイスを作成します... 3Dデバイスの作成に成功しました 973: テクスチャ最大幅:4096 最小幅:1 974: 描画制限: D_D3DPTEXTURECAPS_POW2 = 0 D_D3DPTEXTURECAPS_SQUAREONLY = 0 975: テクスチャピクセルフォーマット 976: 通常グラフィック用 977: BIT:16 RED:5 GREEN:6 BLUE:5 979: RED:00f800 GREEN:0007e0 BLUE:00001f 980: BIT:32 RED:8 GREEN:8 BLUE:8 981: RED:ff0000 GREEN:00ff00 BLUE:0000ff 983: アルファチャンネル付きグラフィック用 984: BIT:16 ALPHA:4 RED:4 GREEN:4 BLUE:4 985: ALPHA:0000f000 RED:00000f00 GREEN:000000f0 BLUE:0000000f 986: BIT:32 ALPHA:8 RED:8 GREEN:8 BLUE:8 988: ALPHA:ff000000 RED:00ff0000 GREEN:0000ff00 BLUE:000000ff 989: Direct3D 関連の初期化は正常に終了しました 990: グラフィック管理系の初期化を行います 992: 3Dグラフィック描画機能を使用します 994: フォントの初期化を行います 999: フォントの初期化は正常に終了しました 1001: グラフィック管理系の初期化は正常に終了しました 1060: サーフェス間転送には BltFast を使用します 1062: BitBlt:29696μs BltFast:24832μs 1063: スキャンラインの数:480 1183: 1フレーム当たりの時間は 16 msecです 1184: Tri00:16 msec 1186: Tri01:17 msec 1187: Tri02:16 msec 1189: Tri03:17 msec 1190: 画面モード変更処理は正常に終了しました 1200: オーバーレイサーフェスを使用します    UYVY 1201: DirectDraw 関連の初期化は正常に終了しました 1215: 文字コードバッファの初期化を行います... 完了しました 12397: Direct3Dデバイスを削除しました 12399: Direct3Dオブジェクトを解放します 12400: Direct3Dオブジェクトを解放しました 12402: メインサーフェスを破棄をします... 完了しました 12403: DirectInput 関連の終了処理... 完了 12405: DirectDrawオブジェクトを解放します 12408: DirectDrawオブジェクトを解放しました 12410: DirectDraw オブジェクトの取得を行います.... 成功 12412: 引き続き初期化処理... 初期化に成功しました 12416: ビデオカードの情報 12417: 画面モードの変更処理を開始します 640 x 480 16 bit 12419: 画面解像度を変更します... 成功しました 12538: 画面モードの変更は正常に終了しました 12545: 出力画面用の DirectDrawSurface を作成します 12583: 各スクリーンメモリの配置位置 12637: PrimaryBuffer : VIDEOMEMORY 12647: BaskBuffer : VIDEOMEMORY 12652: 出力画面用の DirectDrawSurface の作成は正常に終了しました 12662: Direct3Dオブジェクトを取得します 12713: Direct3Dオブジェクトは正常に取得されました 12720: 3Dデバイスを作成します... 3Dデバイスの作成に成功しました 12819: DirectInput関係初期化処理 12821: DirectInput7 の取得中... 成功 12824: 引き続き初期化処理... 初期化成功 12827: ジョイパッドの初期化... 12834: 入力装置を見つけました 12837: デバイスの登録名:Rumble Pad 12838: デバイスの製品登録名:Rumble Pad 12840: 周期的エフェクトの作成に失敗しました。 12842: ジョイパッドの追加は正常に終了しました 12843: ジョイパッドの初期化は正常に終了しました 12845: マウスデバイスの初期化... 初期化成功 12848: キーボードデバイスの初期化... 初期化成功 12852: DirectInput 関連の初期化は正常に終了しました 25805: Direct3Dデバイスを削除しました 25806: Direct3Dオブジェクトを解放します 25808: Direct3Dオブジェクトを解放しました 25809: メインサーフェスを破棄をします... 完了しました 25811: DirectInput 関連の終了処理... 完了 25812: DirectDrawオブジェクトを解放します 25816: DirectDrawオブジェクトを解放しました 25818: DirectDraw オブジェクトの取得を行います.... 成功 25821: 引き続き初期化処理... 初期化に成功しました 25824: ビデオカードの情報 25826: 画面モードの変更処理を開始します 640 x 480 16 bit 25827: 画面解像度を変更します... 成功しました 25950: 画面モードの変更は正常に終了しました 25959: 出力画面用の DirectDrawSurface を作成します 25995: 各スクリーンメモリの配置位置 26049: PrimaryBuffer : VIDEOMEMORY 26065: BaskBuffer : VIDEOMEMORY 26072: 出力画面用の DirectDrawSurface の作成は正常に終了しました 26080: Direct3Dオブジェクトを取得します 26130: Direct3Dオブジェクトは正常に取得されました 26139: 3Dデバイスを作成します... 3Dデバイスの作成に成功しました 26385: DirectInput関係初期化処理 26386: DirectInput7 の取得中... 成功 26389: 引き続き初期化処理... 初期化成功 26393: ジョイパッドの初期化... 26401: 入力装置を見つけました 26404: デバイスの登録名:Rumble Pad 26405: デバイスの製品登録名:Rumble Pad 26407: 周期的エフェクトの作成に失敗しました。 26409: ジョイパッドの追加は正常に終了しました 26410: ジョイパッドの初期化は正常に終了しました 26412: マウスデバイスの初期化... 初期化成功 26414: キーボードデバイスの初期化... 初期化成功 26418: DirectInput 関連の初期化は正常に終了しました 31185: Direct3Dデバイスを削除しました 31187: Direct3Dオブジェクトを解放します 31188: Direct3Dオブジェクトを解放しました 31190: メインサーフェスを破棄をします... 完了しました 31191: DirectInput 関連の終了処理... 完了 31193: DirectDrawオブジェクトを解放します 31197: DirectDrawオブジェクトを解放しました 31198: DirectDraw オブジェクトの取得を行います.... 成功 31201: 引き続き初期化処理... 初期化に成功しました 31204: ビデオカードの情報 31206: 画面モードの変更処理を開始します 640 x 480 16 bit 31207: 画面解像度を変更します... 成功しました 31329: 画面モードの変更は正常に終了しました 31335: 出力画面用の DirectDrawSurface を作成します 31374: 各スクリーンメモリの配置位置 31422: PrimaryBuffer : VIDEOMEMORY 31438: BaskBuffer : VIDEOMEMORY 31444: 出力画面用の DirectDrawSurface の作成は正常に終了しました 31454: Direct3Dオブジェクトを取得します 31466: Direct3Dオブジェクトは正常に取得されました 31513: 3Dデバイスを作成します... 3Dデバイスの作成に成功しました 31779: DirectInput関係初期化処理 31781: DirectInput7 の取得中... 成功 31784: 引き続き初期化処理... 初期化成功 31787: ジョイパッドの初期化... 31794: 入力装置を見つけました 31797: デバイスの登録名:Rumble Pad 31799: デバイスの製品登録名:Rumble Pad 31800: 周期的エフェクトの作成に失敗しました。 31802: ジョイパッドの追加は正常に終了しました 31803: ジョイパッドの初期化は正常に終了しました 31805: マウスデバイスの初期化... 初期化成功 31808: キーボードデバイスの初期化... 初期化成功 31812: DirectInput 関連の初期化は正常に終了しました
Re: タスク切換時の画像復帰 ( No.17 )
名前:niwa 日時:2007/01/31 23:19

修正バージョンを試してみました。 こちらでは強制終了などは起きていません。 ただ「CreateGraphFromMem,GetDrawScreenGraph」 等の命令は使っていませんが。 以上、簡単ですが動作報告でした。
Re: タスク切換時の画像復帰 ( No.18 )
名前:管理人 日時:2007/02/01 14:06

 SweetBlackさん、niwaさんどうも、DXライブラリの管理人です。 お試し頂き有難うございます。m(_ _)m  SweetBlackさん、大変お手数で申し訳ありませんが、不都合が無ければ SweeetBlackさんが現在製作中のプロジェクト、若しくはSweetBlackさんの 環境で強制終了が発生することが確認できているプログラムを BQE00322(アットマーク)nifty.com まで送って頂けないでしょうか?m(_ _)m
Re: タスク切換時の画像復帰 ( No.19 )
名前:SweetBlack 日時:2007/02/01 15:10

毎度お手間をおかけいたします。 つい今しがた、それらしい現象の再現に成功した……と思われます。 以下のサンプルをお試しいただければ幸いです。 //----------------------------ここから #include "DxLib.h" #include <stdio.h> int GraphHandle; // 画像読み込み関数 void LoadImage( void ) { void *Buffer; int BufferSize; FILE *fp; // 画像ハンドルを全て削除する InitGraph(); // 画像ファイルをメモリに読み込む fp = fopen( "test1.bmp", "rb" ); fseek( fp, 0L, SEEK_END ); BufferSize = ftell( fp ); fseek( fp, 0L, SEEK_SET ); Buffer = malloc( BufferSize ); fread( Buffer, BufferSize, 1, fp ); fclose( fp ); // メモリに読み込んだ画像データでハンドルを作成する GraphHandle = CreateGraphFromMem( Buffer, BufferSize ); // メモリに読み込んだ画像データを解放する free( Buffer ); } // WinMain 関数 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int i,SH ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1; // 画像の復帰関数を登録する SetRestoreShredPoint( LoadImage ); // 画像を読み込む LoadImage(); // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ); // 画面のクリア ClearDrawScreen(); // 画像の描画 DrawGraph( 0, 0, GraphHandle, TRUE ); // 裏画面の内容を表画面に反映 ScreenFlip(); i = GetColor( 255 , 255 , 255 ) ; // メインループ(ESCキーが押されたらループを抜ける) while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { DrawString( 100 , 400 , "あいうえおかきくけこさし" , i ); } // DXライブラリの後始末 DxLib_End(); // ソフトの終了 return 0; } //---------------------------------ここまで DrawString、しかも文字列にある条件があるとき (詳細不明)に落ちているようです。 最悪の場合、管理人様がご提案くださった通り、 メールにて対応させていただこうと考えてましたが、 ぎりぎり現象の再現に成功しましたので、 今回はこのままで続けさせていただきました。 ご了承ください。
Re: タスク切換時の画像復帰 ( No.20 )
名前:SweetBlack 日時:2007/02/01 19:48

追記です。 知人にテストプログラムを送って試して貰ったところ、 XPではエラーが発生せず、 WIN2000だと発生したようです。
Re: タスク切換時の画像復帰 ( No.21 )
名前:管理人 日時:2007/02/02 11:51

 SweetBlackさんどうも、DXライブラリの管理人です。  テストプログラムを掲載頂き有難うございます、私の環境も Windows2000 なので見事に再現しました。  修正したバージョンをアップしましたので、宜しければお試し下さい。m(_ _)m (ただ、DrawString とは関係が無いところでエラーが発生していたので SweetBlack さんの環境で発生したエラーとは違うエラーだったかもしれません・・・・) http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe //VC用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe //BCC用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)
Re: タスク切換時の画像復帰 ( No.22 )
名前:SweetBlack 日時:2007/02/02 12:45

お世話になります。 早速試させていただいたのですが、 残念ながら同様のエラーが発生しました。 (前述のテストプログラムを使用し、  再構築でコンパイルしなおしてテストしました) 申し訳ありませんが、ご確認をお願いいたします。 管理人様の環境では発生しなくなったのでしたら 私の環境の問題という事になりますね……。
Re: タスク切換時の画像復帰 ( No.23 )
名前:niwa 日時:2007/02/02 14:08

管理人様,SweetBlack様お疲れ様です。 今回のは私の所でも発生したのでご報告します。 現象は、立ち上げたあと全画面黒の状態から何も表示されずに終了です。 その時のlogの一部です。 0:システムの情報を出力します 13: DXライブラリ Ver2.tt 14: OS Windows2000 ( Build 2195 Service Pack 4 )  : 1488: DirectDraw 関連の初期化は正常に終了しました 1493: 文字コードバッファの初期化を行います... 完了しました //ここでlog終了
Re: タスク切換時の画像復帰 ( No.24 )
名前:管理人 日時:2007/02/03 13:48

 SweetBlackさん、niwaさんどうも、DXライブラリの管理人です。  お二方とも駄目でしたか・・・  アップミスの可能性もありますので、再度コンパイルしたものを アップし直してみました。申し訳ありませんが宜しければもう一度 試してみて下さい。m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe //VC用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe //BCC用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)  あと、私の環境で SweetBlackさんが掲載して下さったテストプログラム をコンパイルしたものをアップしてみましたので、宜しければ SweetBlackさん、 niwaさんの環境でも正常に動作するかどうか、試してみて下さい。m(_ _)m http://homepage2.nifty.com/natupaji/temp/ALT_TABTest.ZIP
Re: タスク切換時の画像復帰 ( No.25 )
名前:SweetBlack 日時:2007/02/03 14:12

管理人様、niwa様、お世話になります。 新たに頂いたものを使ってもやはりダメでした。 コンパイルされたものを使っても同様のエラーが 発生しました。 (切り替え3回目にてアプリケーションエラー発生) こうなると環境の問題なんでしょうか……。
Re: タスク切換時の画像復帰 ( No.26 )
名前:niwa 日時:2007/02/04 22:35

遅くなりましたが動作報告です。 ALT_TABTestプログラムを試しましたがこちらでは落ちませんでした。 何回か起動、切り替え、終了を繰り返しましたが今の所落ちずに動いています。 >環境の問題 こちらはビデオカードとDirectXは最新と思われる物を入れてます。 でもこれじゃ無さそうですね。
Re: タスク切換時の画像復帰 ( No.27 )
名前:管理人 日時:2007/02/05 12:29

 SweetBlackさん、niwaさんどうも、DXライブラリの管理人です。  テスト結果のご報告有難うございます。m(_ _)m  SweetBlackさん、環境の問題というか、とりあえず私と SweetBlackさんとniwaさんの3つの限定された環境でテストした 限りでは SweetBlackさんの環境でのみ発生しているということに なりますが、わずか3つの環境でテストした限りで、且つ描画結果が 乱れる等の現象ではなく強制終了という形で何処かではっきりと エラーが発生してるのであれば、その箇所を突き止め調べれば 対処は可能だと思います。(そして私とniwaさんの環境では偶々 発生しなかっただけでごく一般的なバグである可能性も十分にあります)  VisualC++ 2005 Express Edition のデバッグ機能を使用すれば エラーが発生した箇所が分かりますので、インストール作業に それなりに時間が掛かり大変申し訳ないのですが、 もし宜しければVisualC++ 2005 Express Edition を使用しての テストをしてみて頂けないでしょうか?m(_ _;m
Re: タスク切換時の画像復帰 ( No.28 )
名前:SweetBlack 日時:2007/02/05 21:05

お世話になります。 なんとかVC++の方をセッティング終わり、 テストプログラムの可動もコンパイルも確認しました。 で、肝心のデバッグ機能ですが、 なにぶん不慣れなものでこれで正しい使い方なのか どうか判りませんが、使ってみて次のような メッセージが出たので、一応見ていただきたいと思います。 //----------------------------ここから ○○.exe の 0x5c015851 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x025c0200 に書き込み中にアクセス違反が発生しました。 //----------------------------ここまで これが探していたエラーの原因なのかどうかまで 今の私では判断つきません。 違っていたらご指摘ください。 私の方でも引き続き試行錯誤してみます。
Re: タスク切換時の画像復帰 ( No.29 )
名前:管理人 日時:2007/02/06 13:28

 SweetBlackさんどうも、DXライブラリの管理人です。  ご報告有難うございます、お手数お掛けして申し訳ありませんでした。m(_ _)m  そして、本当に申し訳ありません、SweetBlackさんの環境で実行して 頂こうと思って作成していた VisualC++ 2005 Express Edition 用の テストプロジェクトで、私の環境でもエラーが発生しました。m(_ _;m  これが SweetBlackさんの環境で発生していたエラーかどうかはまだ 分かりませんが、宜しければ今回発見したエラーを修正したバージョンを お試しになってみて下さい。m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe //VC用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe //BCC用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)
Re: タスク切換時の画像復帰 ( No.30 )
名前:SweetBlack 日時:2007/02/06 19:55

管理人様。お世話になります。 新しいバージョンを使って テストプログラムを試してみたところ、 10回程度切り替えを繰り返しても落ちませんでした。 おそらくなおっているものと思われます。 ありがとうございました。 ただ、やはり製作中のプログラムに組み込んでみたところ 落ちる確率は格段に減っていますが、やはり落ちてしまいました。 まだ他に原因がありそうですので、さらに絞込み作業を続けるつもりです。 ちなみに、偶然気づいたのですが、 上記のテストプログラムを起動中に、 その「製作中のプログラム」を起動して タスク切り替えをしようとした場合は ほぼ確実に落ちるようでした。 さらに調べてみて何かわかりましたらご報告させていただきます。
Re: タスク切換時の画像復帰 ( No.31 )
名前:管理人 日時:2007/02/07 13:50

 SweetBlackさんどうも、DXライブラリの管理人です。  ご報告有難うございます、テストプログラムで確認できる エラーは解消出来たみたいですね。  VC++ のデバッグ機能にはエラーが発生した箇所を確認できる機能が ありますので、宜しければ SweetBlackさんが製作中のプログラムを VisualC++ 2005 Express Edition 上で実行してみて頂けないでしょうか?  エラー箇所がDXライブラリ内部の場合は詳細な位置はわかりませんが、 エラーが発生して処理が一時的に VC++ 2005 EE に戻ってきた状態で、 VC++ 2005 EE のメニューから 「デバッグ」→「ウインドウ」→「呼び出し履歴」 を選択することでエラーが発生した箇所に行き着くまでにどんな関数を 辿ったかを確認できる「呼び出し履歴」ダイアログが表示されますので、 宜しければプログラム中の何処でエラーが発生したかをご確認になって みてください。m(_ _)m
Re: タスク切換時の画像復帰 ( No.32 )
名前:SweetBlack 日時:2007/02/07 21:33

管理人様。何度もお世話になります。 デバッグのやり方を教えていただいてありがとうございます。 さて、落ちる件ですが、前回の書き込みで 落ちる確率が格段に減ったと書きましたが、 確実に落ちるやり方が判りました。 (前述のテストプログラムでは落ちません) ALT+TABで切り替える際に、完全に切り替える前に さらに切り替えようとすると確実に落ちます。 (つまりALTを押しっぱなしでTABだけ連打する) そして、デバッグの結果ですが。次のようになりました。 なにか間違いや足りない点がございましたらご指摘ください。 プログラムにおける2種類の状態で前述の操作をしてみました。 (具体的にはプレイ中画面、タイトル画面) //---------------------------------ここから 例1:プレイ中の画面 <エラーメッセージ> ○○.exe の 0x5c015851 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x04280a00 に書き込み中にアクセス違反が発生しました。 <逆アセンブル表示> 5C015820 push eax 5C015821 mov ecx,esi 5C015823 call 5C014CCF 5C015828 cmp eax,ebx 5C01582A jne 5C015901 5C015830 mov eax,dword ptr [esi+33B8h] 5C015836 add eax,dword ptr [esi+3358h] 5C01583C mov ecx,dword ptr [esi+1A78h] 5C015842 mov ebx,ecx 5C015844 lea edx,[esi+1A74h] 5C01584A mov esi,dword ptr [edx] 5C01584C shr ecx,2 5C01584F mov edi,eax 5C015851 rep movs dword ptr es:[edi],dword ptr [esi] ← ここにマーク 5C015853 mov ecx,ebx 5C015855 and ecx,3 5C015858 rep movs byte ptr es:[edi],byte ptr [esi] 5C01585A mov dword ptr [edx],eax 5C01585C jmp 5C0158FF 5C015861 mov eax,dword ptr [esi] 5C015863 push ebx 5C015864 mov ecx,esi 5C015866 call dword ptr [eax+0CCh] 5C01586C cmp eax,ebx 5C01586E jne 5C015901 5C015874 lea edi,[esi+3350h] 5C01587A mov eax,dword ptr [edi] <呼び出し履歴> d3dim700.dll!5c015851() ← これにマーク [下のフレームは間違っているか、または見つかりません。d3dim700.dllに対して読み込まれたシンボルはありません。] d3dim700.dll!5c016b72() d3dim700.dll!5c018505() ○.exe!OnePixelOverCopy() + 0x486 バイト ○○.exe!G_D3D_DrawGraph() + 0x133 バイト ○○.exe!5T_DrawGraph() + 0x26d バイト ○○.exe!DrawGraph() + 0x1f バイト 例2:タイトル画面 <エラーメッセージ> ○○.exe の 0x5c015851 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x036e0000 に書き込み中にアクセス違反が発生しました。 <逆アセンブル>  例1と同じ <呼び出し履歴> d3dim700.dll!5c015851() [下のフレームは間違っているか、または見つかりません。d3dim700.dllに対して読み込まれたシンボルはありません。] d3dim700.dll!5c016b72() d3dim700.dll!5c00f32f() d3dim700.dll!5c016bc1() d3dim700.dll!5c018505() ○○.exe!G_D3D_DrawGraph() + 0x600 バイト ○○.exe!5T_DrawGraph() + 0x26d バイト ○○.exe!DrawGraph() + 0x1f バイト //---------------------------------ここまで 以上です。 呼び出し履歴は、先頭行が最後尾だと推察して、 先頭から数行のみ抜粋しております。 それではよろしくお願いいたします。
Re: タスク切換時の画像復帰 ( No.33 )
名前:管理人 日時:2007/02/08 13:56

 SweetBlackさんどうも、DXライブラリの管理人です。  ご情報有難うございます。  私の環境でもALT+TABのALTを押しっぱなしにすることで ご報告して頂いたエラーを容易に発生させることが出来ました。orz  こちらのエラーが発生しないように修正したバージョンをアップ しましたので、宜しければお試し下さい。m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe //VC用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe //BCC用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)
Re: タスク切換時の画像復帰 ( No.34 )
名前:SweetBlack 日時:2007/02/08 20:29

管理人様。 ありがとうございます! 試してみましたが、問題なく動いております。 これで心置きなく製作を続ける事ができます。 長々とおつき合いありがとうございました。
Re: タスク切換時の画像復帰 ( No.35 )
名前:管理人 日時:2007/02/10 16:47

こちらこそ中々解決出来ずにお手数お掛けしました。m(_ _;m niwaさんもご協力頂き有難う御座います。m(_ _)m

Page: 1 | 2 |