トップページ > 過去ログ > 記事閲覧
GetDrawScreenGraphについて
名前:ちぃがぅ 日時: 2008/04/16 23:13

初めて書き込みをさせていただきます。 DXライブラリを使っていて少し気になるエラーがでたので書かせてもらいます。 GetDrawScreenGraphで画面データを読み込む値をwindowの範囲外に指定すると強制終了するみたいです。 過去のスレッドを見ても該当する記事がなかったので書かせてもらいます。 DXライブラリのバージョンは2.24cです。 以下は検証するために書いたソースです。 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int GHandle ; int i ; int Cr ; ChangeWindowMode(true); if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1; // エラーが起きたら直ちに終了 } // 白色の値を取得 Cr = GetColor( 255 , 255 , 255 ) ; // 1000個の点を描く for( i = 0 ; i < 1000 ; i ++ ) { // ランダムな位置に点を描く(『GetRand』を使用) DrawPixel( GetRand( 640 ) , GetRand( 480 ) , Cr ) ; } // 画面のサイズと同じサイズのグラフィックを作成 GHandle = MakeGraph( 640 , 480 ) ; // 画面データの取りこみ GetDrawScreenGraph( -10 , -10 , 630 , 470 , GHandle ) ; WaitKey() ; // 結果を見るためにキー待ち(『WaitKey』を使用) DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 } DXライブラリの更なる発展に繋がれば幸いです。

Page: 1 |

Re: GetDrawScreenGraphについて ( No.1 )
名前: 日時:2008/04/17 11:18

そもそもSurfaceが用意されているのが 自アプリケーションのウィンドウ上の 左上からのサイズなので、-10は領域範囲外。 #無い物を取ることはできない。 DXライブラリでは説明に同じ大きさでなければ、 とありますが、あくまでも画面左上を0とする サイズに限定されるのではないかと。 #ただ、コードを見る限りleftは0未満の場合 #-1を返すようになっているようなので #APエラーというのは少しいただけないですね if( left < 0 || top < 0 || right > GBASE.DrawSizeX || bottom > GBASE.DrawSizeY ) return -1 ;
Re: GetDrawScreenGraphについて ( No.2 )
名前:管理人 日時:2008/04/19 22:01

ご報告ありがとうございます。 座標値にエラーがあった場合、見事にメモリを破壊していました。 *ValidIndex++; ←こんな記述が・・・ 期待する動作 *ValidIndex = *ValidIndex + 1; 実際の動作 *ValidIndex; ValidIndex++; orz 修正版をアップしましたので宜しければお使い下さい。m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe //VC用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe //BCC用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)

Page: 1 |