トップページ > 記事閲覧
実行ファイルの動作について
名前:なな 日時: 2017/06/29 00:07

5〜6年ぶりにdxlibを触ることにして、動かしてみたところ ビルド後実行ファイルが 起動→結果が一瞬見えて画面から消える(終了はされていない)→タスクバーから開くと普通に起動 という動作をして困っています #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // DXライブラリ初期化 if (DxLib_Init() == -1) return 0; // Hello C World!と表示、最後に改行 printfDx("Hello C World!\n"); // 画面に適当に数値を描画 printfDx(" 600 x 800 = %d \n", 600 * 800); // 画面が降り切れるほど文字列を描画 printfDx("実験実験実験実験実験実験実験実験実験"); // 画面を青くする DrawBox(0, 0, 640, 480, GetColor(0, 0, 255), TRUE); // 出力した文字列を表示 ScreenFlip(); // キーが押されるまで待つ WaitKey(); // DXライブラリの使用終了 DxLib_End(); return 0; } ↑のプログラムであれば、ビルド後一瞬文字などが見えて、ウィンドウが消える → タスクから開くと普通に文字が見え、キー入力までウィンドウが残る という感じです。 また #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // DXライブラリ初期化 if (DxLib_Init() == -1) return 0; // キーが押されるまで待つ WaitKey(); // DXライブラリの使用終了 DxLib_End(); return 0; } を実行するとキーを押さずともウィンドウが消え(タスクにはある)、タスクからもう一度開くと キーが押されるまでウィンドウが表示されるという感じです。 ( //WaitKey() とすると普通に起動して普通に消えます(タスクのところにも残らない)) 原因はよくわからないですが、WaitKey()で何か起きているような気がします。
メンテ

Page: 1 |

Re: 実行ファイルの動作について ( No.1 )
名前:なな 日時:2017/06/29 00:10

追記になります 開発環境 Visual Studio2017, OS windows10 64bit メモリ4GB CPU corei5
メンテ
Re: 実行ファイルの動作について ( No.2 )
名前:なな 日時:2017/06/29 11:58

さらに追記になります。デバッグで追っかけると、以下の文面がありました。 (ここまでは目立った不自然な点はなし) 2955:DXライブラリの初期化処理終了 0x75DBA9F2 で例外がスローされました (Test3.exe 内): Microsoft C++ の例外: wil::ResultException (メモリの場所 0x017ADA88)。 0x75DBA9F2 で例外がスローされました (Test3.exe 内): Microsoft C++ の例外: [rethrow] (メモリの場所 0x00000000)。 メモリの処理なんでしょうか?
メンテ
Re: 実行ファイルの動作について ( No.3 )
名前:管理人 日時:2017/06/30 00:16

手元の Windows10 64bit 環境で載せていただいたプログラムを Visual Studio から実行してみましたが、 キー入力、若しくはマウス入力( または画面タッチ )があるまでプログラムが終了することはありませんでした お使いのDXライブラリのバージョンは最新のものでしょうか? もし 5〜6年前のバージョンをお使いでしたら、最新版では直っている可能性がありますので よろしければこちらの暫定の最新版をお試しください m(_ _)m http://dxlib.o.oo7.jp/temp/DxLibVCTest.exe // Windows版 VisualC++ 用 http://dxlib.o.oo7.jp/temp/DxLibBCCTest.exe // Windows版 BorlandC++ 用 http://dxlib.o.oo7.jp/temp/DxLibBCC2Test.exe // Windows版 C++ Builder 10.1 Berlin 用 http://dxlib.o.oo7.jp/temp/DxLibGCC_MinGWTest.exe // Windows版 MinGW 用 http://dxlib.o.oo7.jp/temp/DxLibDotNet.zip // Windows版 .NET用 http://dxlib.o.oo7.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』をして下さい) > 0x75DBA9F2 で例外がスローされました (Test3.exe 内): Microsoft C++ の例外: wil::ResultException (メモリの場所 0x017ADA88)。 > 0x75DBA9F2 で例外がスローされました (Test3.exe 内): Microsoft C++ の例外: [rethrow] (メモリの場所 0x00000000)。 > メモリの処理なんでしょうか? 『wil::ResultException』で Google 検索をしてみたところ、Windows10 Anniversary Update をインストールすると 発生するようになるもののようです <Windows10 Anniversary Update実施後 wil::ResultException例外が発生するようになった> https://social.msdn.microsoft.com/Forums/vstudio/ja-JP/7279f3b4-90d5-446d-99db-b10875ef90b1/windows10-anniversary-update-wilresultexception?forum=vcgeneralja こちらで処理を追われた方によると Windows10 Anniversary Updateのバグではないか、とのことです
メンテ
Re: 実行ファイルの動作について ( No.4 )
名前:なな 日時:2017/06/30 12:44

う〜ん、一応最新版を当てなおしてリビルドしてみたのですが、状況が改善されませんね。 そもそもウィンドウが形成されず、初めからフルスクリーンで一瞬表示され消えてしまいます。 その他の現象としてほかのアプリケーション(edgeやexplorer)が勝手にサイズ変更されたりします。 まだ試してないのですが、visual studio 2017 と 2015を両方インストールしてあるのがもしかしたら原因かもしれないです。 時間に余裕ができ次第確認します。
メンテ
Re: 実行ファイルの動作について ( No.5 )
名前:管理人 日時:2017/07/01 21:24

お試しいただきありがとうございます 最新版でも駄目でしたか… WaitKey は戻り値が「キーが押された場合はキーコードが、マウスクリックやその他の原因の場合は -1 が返る」ようになっています なので、よろしければこちらのプログラムを実行して、WaitKey の戻り値の値を教えていただけないでしょうか? m(_ _;m #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int KeyCode ; // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // WaitKey を実行 KeyCode = WaitKey() ; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; // メインループ(何かキーが押されたらループを抜ける) while( ProcessMessage() == 0 ) { // 画面のクリア ClearDrawScreen() ; // WaitKey の戻り値を表示 DrawFormatString( 0, 0, GetColor( 255,255,255 ), "WaitKey の戻り値 : %d", KeyCode ) ; // 裏画面の内容を表画面に反映 ScreenFlip() ; } // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; } > そもそもウィンドウが形成されず、初めからフルスクリーンで一瞬表示され消えてしまいます。 ウインドウモードで起動するには DxLib_Init を呼ぶ前に ChangeWindowMode( TRUE ) ; を実行しておく必要がありますので、 フルスクリーンモードで起動するのは正常です
メンテ
Re: 実行ファイルの動作について ( No.6 )
名前:なな 日時:2017/07/01 22:19

管理人様のプログラムだと問題なく動作しました。 WaitKey関数の戻り値は25、28などで問題なしですね。 ただ //ChangeWindowMode(TRUE); とすると ビルドからの実行 → 何も起こらず下のタスクにアイコンのみ現れる → それをクリックするとフルスクリーンで動作し、 キーを押すと画面上にWaitKey関数の戻り値が表示される(ただしアプリが終了せず、タスクマネージャーから直接閉じる必要がある) という感じになりました。 >ウインドウモードで起動するには DxLib_Init を呼ぶ前に ChangeWindowMode( TRUE ) ; を実行しておく必要がありますので、 >フルスクリーンモードで起動するのは正常です そうだったのですか。失礼しました。
メンテ
Re: 実行ファイルの動作について ( No.7 )
名前:管理人 日時:2017/07/01 22:38

お試しいただきありがとうございます > ただ //ChangeWindowMode(TRUE); とすると > ビルドからの実行 → 何も起こらず下のタスクにアイコンのみ現れる → それをクリックするとフルスクリーンで動作し、 タスクにアイコンのみ現れる、というのが謎です… クリックするとフルスクリーンになるということは、何らかの原因で別のウインドウがアクティブになってしまい、 ビルドした実行ファイルの実行が非アクティブになっているのだと思います > キーを押すと画面上にWaitKey関数の戻り値が表示される(ただしアプリが終了せず、タスクマネージャーから直接閉じる必要がある) > という感じになりました。 WaitKey関数の戻り値が表示された状態で、ALTキーと F4キーを押すとプログラムが終了します( ウインドウの×ボタンを 押したときと同じ動作が行われます ) > >ウインドウモードで起動するには DxLib_Init を呼ぶ前に ChangeWindowMode( TRUE ) ; を実行しておく必要がありますので、 > >フルスクリーンモードで起動するのは正常です > そうだったのですか。失礼しました。 作成された実行ファイルを直接実行した場合や、ウインドウモードで実行した場合は正常に動作するとのことで、 とりあえずななさんの作業に支障は無くなったと思うのですが如何でしょうか?
メンテ
Re: 実行ファイルの動作について ( No.8 )
名前:なな 日時:2017/07/01 22:46

>作成された実行ファイルを直接実行した場合や、ウインドウモードで実行した場合は正常に動作するとのことで、 >とりあえずななさんの作業に支障は無くなったと思うのですが如何でしょうか? そうですね。とりあえずフルスクリーンで作る予定はなかったので大丈夫です。 お忙しい中ありがとうございました。数年ぶりにDxlibでプログラム楽しませてもらいます!
メンテ

Page: 1 |

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

   クッキー保存