Re: Windows 10 version 1703で例外エラー ( No.1 ) |
- 名前:管理人 日時:2017/06/28 01:48
> 私の環境では、現在、"DxLib.h" をインクルードしないと、C++をビルドできなくなっているようです。これは正常な状態でしょうか?
はい、正常です
WinMain や HINSTANCE などの Windowsアプリ用の識別子を使用するには <windows.h> をインクルードする必要がありますので、
"DxLib.h" をインクルードされない場合は、代わりに <windows.h> をインクルードしてください
( DxLib.h の内部で windows.h をインクルードしているので、DxLib.h をインクルードする場合は
windows.h をインクルードしなくても問題が発生しないようになっています )
> 原因は [Windows 10 version 1703] への更新にあることは確かと思いますが、どこをどうし直したらよいのか見当がつきません。
> Visual Studio 2015をアンインストールして、再インストールすれば、このエラーを消すことができるでしょうか?
すみません、アンインストールと再インストールをすればエラーが無くなるかは私には分かりません
ただ、現在の Visual Studio の最新版は Visual Studio 2017 なので、Visual Studio 2015 を再インストールするより、
Visual Studio 2017 をお試しになった方が良いと思います
> どうやったら、"この例外のハンドラー" を作ることができるのでしょうか?
すみません、C++ の機能に疎く、私も分かりません (- -;;
|
Windows 10 version 1703で例外エラー ( No.2 ) |
- 名前:よしひろ 日時:2017/06/28 17:27
さっそく、ご回答いただきありがとうございます。
ご教示に従い、以下の2点を確認してみます。
1. "DxLib.h" の代わりに、<windows.h> をインクルードして、例外エラーが出るかを確認します。
2. Visual Studio 2015をアンインストールして、Visual Studio 2017をインストールしてみます。
ありがとうございました。
結果が出ましたら、ご報告いたします。
|
Re: Windows 10 version 1703で例外エラー ( No.3 ) |
- 名前:yumetodo 日時:2017/06/30 23:11
もし
#include <Windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
return 0;
}
でもエラーになるようでしたら、MSにFeedbackを投げてください
h ttps://connect.microsoft.com/VisualStudio/feedback/
英語で投げる必要がありますが、一番確実です。0xC0000005ということなのでWindows Updateに起因する可能性もあります。
この時
- X86/x64ともに発生するか
- VS2015/2017ともに発生するか
が鍵となりますので十分な検証が必要です。
>例外のハンドラー
どちらかと言うとWinMain関数を呼び出しているコンパイラ生成部分で例外が発生しているようなので、捕捉する手段はありません。
自分でDllを動的loadしている場合などなら、例外がSEHで実装されいる場合(C++の例外の実装は特許の関係もありいろいろある)、
C++標準のtry-catchで補足できる処理系が多いです。またMSVC独自拡張の__try/__catch文も有効です。
|
Windows 10 version 1703で例外エラー ( No.4 ) |
- 名前:よしひろ 日時:2017/07/01 17:55
yumetodo様
ご指導、ありがとうございます。
私は英語が不得意なもので、MSにFeedbackを投げるのは、ちょっと尻込みしてしまいます。
これから、Visual Studio 2015 をアンインストールして、Visual Studio 2017 をインストールすべく勉強を始めつつあります。
VS2015/2017ともに発生するか、VS2017では発生しないかを確認するためにも、まず、Visual Studio 2017 をインストールしてみます。
Visual Studio 2017 でも例外エラーが出たら、MSにFeedbackを投げことを考えてみます。
>例外のハンドラーについて
以下のソースで、やってみましたが、return 0; で発生する例外エラーは捉えられませんでした。
return 0; の直前まで、正常にファイルに出力しますが、return 0; のところで中断してしまいます。
#include <Windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) try
{
//----------------------------------------------------------------------------------------
ofstream ofs("C:/DxSample/IOfile/WinMain.txt");//出力ファイルストリーム、出力を上書きする。
//-----------------------------------------------------------------------------------------
ofs << "DXライブラリの後始末の直後、returnの直前。" << '\n';
return 0;
}
catch (...) {//例外の型を指定せずに、例外をキャッチする。はずだがキャッチできず、ここにはこない。
//----------------------------------------------------------------------------------------
ofstream ofs("C:/DxSample/IOfile/WinMainException.txt");//エラー出力用ファイル。
//-----------------------------------------------------------------------------------------
ofs << "\"return\" の位置で、Exceotion Error!" << '\n';
exit(1);
}
例外はエラーは必ず発生するわけではなく、発生したり、しなかったりします。
そんなわけで、とりあえず、Visual Studio 2017 のインストールに進みたいと思います。
私は初心者なので、アンインストール、インストールにもかなりの時間がかかります。
時間はかかりますが、引き続き経過を報告いたしますので、よろしくお願いします。
|
Windows 10 version 1703で例外エラー ( No.5 ) |
- 名前:よしひろ 日時:2017/07/16 20:36
よしひろです。お世話になっています。
遅くなりましたが、ご教示に従い Visual Studio 2015 をアンインストールして、Visual Studio 2017 をインストールした結果を報告します。
結論を先に書きますが、Visual Studio 2017をインストールし、DXライブラリの最新版をインストールした結果は、実用上、問題のない状況となりました。
以下に、Visual Studio 2015 のアンインストールとVisual Studio 2017のインストール、DXライブラリの最新版のインストールの手順と結果を報告します。
1. "DxLib.h" の代わりに、<windows.h> をインクルードして、DXライブラリをまったく使っていないプログラムで例外エラーが出るか否かの確認
この作業は、Visual Studio 2015、Visual Studio 2017 の両方で行いました。
やはり、両方とも例外エラーが発生しました。
プログラム中では、DXライブラリをまったく使っていないので、例外エラーは、私のDXライブラリの使い方の間違いというわけではなく、またDXライブラリ自体にも関りがなく、Windows 10 version 1703 と Visual Studio 2015 の適合性の問題であると考えられます。
後述のように、Visual Studio 2017 でも例外エラーが出ます。ただし、Visual Studio 2017 では、例外エラーの対策がなされていました。
2. Visual Studio 2015のアンインストール
以下のサイト
http://heetnote.com/vsuninst/#i
に載っていた『Visual Studioをきれいにアンインストールする手順のメモ』を参照して、Visual Studio Uninstaller というツールを使用しました。
3. Visual Studio 2017のインストールとDXライブラリの最新版のインストール
この作業は
『Visual Studio Community 2017 を使用した場合のDXライブラリの使い方』
に従い、慎重に実施しました。
4. Visual Studio 2017の使用結果
以下のプログラムでテストを実施しました。
//-----------------------------------------------------------------------------------------------------------------プログラム
#include "DxLib.h"//ボールを操作できるようにする。
//===============================================================================================
//#include <iostream>
#include <fstream>
using namespace std;
//===============================================================================================
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
int BallX, BallY, BallGraph;
int Bw, Bh;//ボールの幅、高さ
//----------------------------------------------------------------------------------------
ofstream ofs("C:/DxSample/outFile/WinMain.txt", ios::out);//出力ファイルストリーム、出力を上書きする。
//-----------------------------------------------------------------------------------------
int zero1 = 0, zero2 = 3;
ofs << "DXライブラリ使用開始直前。" << '\n';
ofs << "zero1 = " << zero1 << " zero2 = " << zero2 << '\n';
// ウインドウモードで起動
ChangeWindowMode(TRUE);
ofs << "ウインドウモードで起動の直後、DXライブラリの初期化の直前。" << '\n';
ofs << "zero1 = " << zero1 << " zero2 = " << zero2 << '\n';
// 画面モードの設定
SetGraphMode(640, 480, 16);
// DXライブラリの初期化
if (DxLib_Init() < 0) return -1;
ofs << "DXライブラリの初期の化直後、DXライブラリの後始末の直前。" << '\n';
ofs << "zero1 = " << zero1 << " zero2 = " << zero2 << '\n';
// ボール君のグラフィックをメモリにロード&表示座標をセット
BallGraph = LoadGraph("C:/DxSample/inGraphicsFile/Ball.png");
BallX = 288; BallY = 400;
// ボール君と自機の弾の画像のサイズを得る
GetGraphSize(BallGraph, &Bw, &Bh);//ボール君
// ボール君を描画
DrawGraph(BallX, BallY, BallGraph, FALSE);
//将来、シューティングゲームの移動ルーチンのループ等が入る。
DrawPixel(320, 240, GetColor(255, 255, 255)); // 点を打つ
WaitKey(); // キー入力待ち
// DXライブラリの後始末
DxLib_End();
ofs << "DXライブラリの後始末の直後、returnの直前。" << '\n';
ofs << "zero1 = " << zero1 << " zero2 = " << zero2 << '\n';
// ソフトの終了
return 0;
//return zero2;//これでも例外が発生する。
}
//-----------------------------------------------------------------------------------------------------------------プログラム
以下は、上記プログラムによるファイル"C:/DxSample/outFile/WinMain.txt"へのチェックプリントの出力結果です。
//-----------------------------------------------------------------------------------------------------------------出力結果
DXライブラリ使用開始直前。
zero1 = 0 zero2 = 3
ウインドウモードで起動の直後、DXライブラリの初期化の直前。
zero1 = 0 zero2 = 3
DXライブラリの初期の化直後、DXライブラリの後始末の直前。
zero1 = 0 zero2 = 3
DXライブラリの後始末の直後、returnの直前。
zero1 = 0 zero2 = 3
//-----------------------------------------------------------------------------------------------------------------出力結果
『returnの直前』まで正常に機能しています。
そして、『returnに入った後、プログラムが完全に終了する前』に例外エラーが出ます。ビルドした回数のうち、5〜8回に1回程度の割合で例外エラーが出ます。この統計はサンプル数が少ないので、あくまでも感じです。
次に、Visual Studioの画面の下方の[出力画面]に出た出力を、正常終了の場合と例外エラーの場合の2種類を示します。
4-1. 例外エラーが発生しない場合
例外エラーが発生しない場合の最後の9行は以下の出力になります。
------------------------------------- 例外エラー発生せず -------------------------------------------------------------------------------
10027:
'Win32Project3.exe' (Win32): 'C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.15063.413_none_55bc94a37c2a2854\comctl32.dll' がアンロードされました
スレッド 0x1794 はコード 0 (0x0) で終了しました。
スレッド 0x3160 はコード 0 (0x0) で終了しました。
スレッド 0x234 はコード 0 (0x0) で終了しました。
スレッド 0xfb8 はコード 0 (0x0) で終了しました。
スレッド 0x984 はコード 0 (0x0) で終了しました。
プログラム '[10592] Win32Project3.exe' はコード 0 (0x0) で終了しました。
------------------------------------- 例外エラー発生せず -------------------------------------------------------------------------------
画面も中断せずに正常に終了します。
4-2. 例外エラーが発生する場合
、
プロジェクトに1回目の例外エラーが発生したとき、以下の表示とダイアログが出てプログラムが中断します。
----------------- 例外エラーの表示 ---------------------------------------------------------------------------------------------------
0x738F36A8 (tmmon.dll) で例外がスローされました (Win32Project3.exe 内): 0xC0000005: 場所 0x0067DF68 の読み取り中にアクセス違反が発生しました
----------------- 例外エラーの表示 ---------------------------------------------------------------------------------------------------
以下のダイアログがチェック付きで出た来たので
----------------- 例外エラーのダイアログ ---------------------------------------------------------------------------------------------------
例外設定 、
レ□この例外型がスローされたときに中断する。『<--- チェック付きで出た来たので、よしひろはこのチェックを外しました。その後、中断しません。』
次からスローされた場合を除く:
□tmmon.dll
----------------- 例外エラーのダイアログ ---------------------------------------------------------------------------------------------------
よしひろはこのチェックを外しました。
一度チェックを外すと、その後、このダイアログ発生せず、プログラムも中断しなくなります。
ただし、その後のプログラムは、画面的には常に正常終了しますが、ソース画面の下の出力画面の最後の10行の中の下から2行目には、例外エラーの表示が出ます。
この例外はWinMain( , , , , )のreturnの所で発生していると思われます。
------------------------------------- 例外エラー発生 -------------------------------------------------------------------------------
6436:
'Win32Project3.exe' (Win32): 'C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.15063.413_none_55bc94a37c2a2854\comctl32.dll' がアンロードされました
スレッド 0xe30 はコード 0 (0x0) で終了しました。
スレッド 0x289c はコード 0 (0x0) で終了しました。
スレッド 0x1bcc はコード 0 (0x0) で終了しました。
スレッド 0x24b0 はコード 0 (0x0) で終了しました。
スレッド 0x2b6c はコード 0 (0x0) で終了しました。
0x738F36A8 (tmmon.dll) で例外がスローされました (Win32Project3.exe 内): 0xC0000005: 場所 0x01E9C748 の読み取り中にアクセス違反が発生しました
プログラム '[1184] Win32Project3.exe' はコード 0 (0x0) で終了しました。
------------------------------------- 例外エラー発生 -------------------------------------------------------------------------------
したがって、例外エラーは発生していますが、実用上は問題なく Visual Studio 2017 上で DxLib を使用することが出来ます。
5. お願い
Windows 10 version 1703 で Visual Studio Community 2017 を使用している方で、例外エラーが発生していない方はいらっしゃるのでしょうか?
ひょっとしたら、私だけに例外エラーが発生しているのではないかと少々不安を感じています。情報をお寄せください。
6. 結論
プロジェクトのビルドと実行を数回繰り返した後に例外エラーが発生します。最初から例外エラーが発生する場合もあるかもしれませんが、私はまだ最初からの例外エラーには巡りあっていません。
1回目の例外発生で、例外エラーのダイアログが出てきて、上述のようにチェックを外すと、それ以降は例外エラーが出てもプログラムが中断せずに終了するので、実用上、問題はないと私は判断しました。
また、この状況から、マイクロソフトも例外エラーの発生を認識していると思われます。そのうち、マイクロソフトがこの問題を解決してくれるものと勝手に期待しています。
以上から、よしひろは、Visual Studio Community 2017 とDXライブラリ このまま使用して、プログラムを作っていくことにします。
管理人さんに Visual Studio Community 2017 を使うようにとのアドバイスの頂いたおかげで解決することが出来ました。ありがとうございました。
また、yumetodo様、今回は、MSにFeedbackを投げませんでしたが、いつか解決できない問題が発生したときには、投げてみようと考えています。
親切なごアドバイス、ありがとうございました。
|
Re: Windows 10 version 1703で例外エラー ( No.6 ) |
- 名前:管理人 日時:2017/07/16 22:31
ご情報ありがとうございます
私も少し調べてみましたので、その結果をご報告します
「tmmon.dll 例外がスローされました」
のキーワードで Google 検索したところ、こちらのウェブページが引っかかりました
<Win32APIプログラムの終了時にエラーになります>
https://social.msdn.microsoft.com/Forums/ja-JP/12b5bb0f-d2f1-470b-9b9b-39e3e834aa80/win32api?forum=vcgeneralja
こちらによると、原因はトレンドマイクロ社のウイルスバスターで、トレンドマイクロに問い合わせたところ
『ウイルスバスターの設定で VisualStudio の実行ファイル devenv.exe をセキュリティチェックの対象外にしてください』
とのご返答があった模様です
devenv.exe は、例えば Visual Studio 2017 Community であれば
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\devenv.exe
といったパスにあります
よろしければお試しください m(_ _)m
|
Windows 10 version 1703で例外エラー ( No.7 ) |
- 名前:よしひろ 日時:2017/07/17 16:33
よしひろです。お世話になっています。
さっそく、ウイルスバスターの例外設定にdevenv.exeを追加しました。
[ウイルスバスター/コンピュータを守る/設定/例外設定]に
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprize\Common7\IDE\devenv.exe
を追加しました。
ここで気が付いたのですが、私はVisual Studio 2017 Communityをインストールしたつもりでしたが、実際はVisual Studio 2017 Enterprizeがインストールされていました。
そのため、devenv.exeは、C:\Program Files (x86)\Microsoft Visual Studio\2017\[Enterprize]\Common7\IDE\devenv.exeに存在していました。
上述のように、ウイルスバスターにdevenv.exeの例外設定をして、PCを再起動しました。
それから、前回お示ししたプログラムをビルド、実行しましたが、やはり例外エラーが出たり、出なかったりします。
また、質問させてください。
Visual Studio 2017 Communityをインストールすれば例外エラーが出なくなるでしょうか?
いずれにしても、Visual Studio 2017 Enterprizeは有償ですので、すぐ削除して、Visual Studio 2017 Communityを再インストールします。
その後、またテストして結果を報告します。
ありがとうございました。
|
Re: Windows 10 version 1703で例外エラー ( No.8 ) |
- 名前:管理人 日時:2017/07/17 17:30
すみません、件のウェブページを再度確認したところ、devenv.exe 以外に
『自作アプリの実行ファイル』も例外設定に追加する、とありました m(_ _;m
他には見落としは無いと思いますが、よろしければよしひろさんも一度 No.6 に
あります『Win32APIプログラムの終了時にエラーになります』のページをご覧になってみてください
|
Windows 10 version 1703で例外エラー ( No.9 ) |
- 名前:よしひろ 日時:2017/07/18 18:19
よしひろです。お世話になっています。
ご指示いただいたウェブページ
<Win32APIプログラムの終了時にエラーになります>
https://social.msdn.microsoft.com/Forums/ja-JP/12b5bb0f-d2f1-470b-9b9b-39e3e834aa80/win32api?forum=vcgeneralja
をよく見たところ、最後の方に以下の記述がありました。
-------------- ウェブページの記述 -------------------------------------------------------------------------------------------------------
トレンドマイクロからの回答について
トレンドマイクロからの指示により、次のフォルダをウィルスバスターの「例外設定」にしたところ、30回やってもエラーは出ませんでした。
1.Visual Studioのプログラム、devenv.exeが入っているフォルダ
2.自作アプリ、Win32Project1.exeが入っているフォルダ
「例外設定」とは、ウィルススキャンの対象から外すということです。トレンドマイクロはこれで使用し、様子をみてもらいたいとのことです。万一エラーが再発するようなら連絡することになりました。
私としてもこれで良いと思います。万一エラーが出るようなら、皆様方にも報告したいと思います。
本件について、多くの助言、ご回答いただきありがとうございました。ひとまずこれでこのスレは終わりにしたいかと思います。
2017年3月31日 9:19
-------------- ウェブページの記述 -------------------------------------------------------------------------------------------------------
[ウイルスバスター/コンピュータを守る/設定/例外設定]に以下を追加しました。
ウイルスバスターの例外設定に追加したdevenv.exeは、そのままファイル名を設定しました。
1. C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprize\Common7\IDE\devenv.exe
2. 以下、自作アプリが入っているフォルダを『ウイルスバスターの例外設定』に追加しました。
2-1. 以前作ったApp1という名前のプロジェクトには、2つのアプリケーション(App1.exe)が2か所に存在していました。
2.1.1 C:\Users\よしひろ.DELL-INSPIRON\Documents\Visual Studio 2015\Projects\App1\Debug\App1\App1.exe
2.2.2 C:\Users\よしひろ.DELL-INSPIRON\Documents\Visual Studio 2015\Projects\App1\Debug\App1\AppX\App1.exe
2つのアプリケーションが入っているプロジェクトは、もう一つ、App2というものもありました。App2もApp1と同じディレクトリ構造です。
これらの二つのプロジェクトの場合は、面倒なので、「Debugフォルダ」を『ウイルスバスターの例外設定』に追加しました。
2-2. 上記の2つのプロジェクトを含めて、合計11個のプロジェクトがありますが、以下に2例だけ示します。
2-2-1 C:\Users\よしひろ.DELL-INSPIRON\Documents\Visual Studio 2015\Projects\Win32Project1\Debug\Win32Project1.exe
2-2-2 C:\Users\よしひろ.DELL-INSPIRON\Documents\Visual Studio 2017\Projects\Win32Project3\Debug\Win32Project3.exe
これらの9個のプロジェクトは、アプリケーション(Win32Project1.exe、Win32Project3等)がDebugの下の1か所にしかないので、迷わずに、Debugフォルダ」を『ウイルスバスターの例外設定』に追加しました。
いずれにしても、Debugフォルダ」を『ウイルスバスターの例外設定』に追加したことになります。
この設定で、20回実行しましたが、エラーは出ませんでした。30回まではやっていませんが、多分、大丈夫だろうと思い報告します。
万一、エラーが出ましたら報告します。
3. すみません、質問をさせて下さい。
Visual Studio 2015をアンインストールして、Visual Studio 2017をインストールしたのですが、まだ、「C:\Users\よしひろ.DELL-INSPIRON\Documents\Visual Studio 2015」というフォルダが残っています。
この「Visual Studio 2015」というフォルダは、削除しても大丈夫でしょうか?
Visual Studio 2017とDXライブラリを使う上で、支障がないのならば削除してしまいたのですが。
もちろん、必要なソースプログラムは別に保存してあります。
初心者なもので、程度の低い質問をして申し訳ありません。
4. 投稿の前にもう一度見直したところ、ウェブページの記述は、「1.Visual Studioのプログラム、devenv.exeが入っているフォルダ」を「例外設定」するという主旨の記述でした。
不注意な読み方ですみません。ちょっと心配になったので、あと10回実行しましたがエラーは出ていません。合計30回です。
「ウイルスバスターの例外設定に追加したdevenv.exeは、そのままファイル名を設定」しても、大丈夫なようです。
これでエラーが出ましたら、「1.Visual Studioのプログラム、devenv.exeが入っているフォルダ」を「例外設定」にして、テストして結果を報告します。
管理人さんのおかげでやっと解決できました。ありがとうございました。
まだまだ、ウェブからの情報取得能力が足りないと、反省しております。
今後もよろしく、ご指導下さい。
|
Re: Windows 10 version 1703で例外エラー ( No.10 ) |
- 名前:管理人 日時:2017/07/19 01:19
ご情報ありがとうございます
問題が解決したようで何よりです
> Visual Studio 2015をアンインストールして、Visual Studio 2017をインストールしたのですが、まだ、「C:\Users\よしひろ.DELL-INSPIRON\Documents\Visual Studio 2015」というフォルダが残っています。
> この「Visual Studio 2015」というフォルダは、削除しても大丈夫でしょうか?
「Visual Studio 2015」のフォルダの中によしひろさんが必要とされるファイルが無いのでしたら
削除してしまって大丈夫だと思います
因みに Visual Studio は複数のバージョンをインストールしていても共存できるので、そのままでも問題ありません
|
Windows 10 version 1703で例外エラー ( No.11 ) |
- 名前:よしひろ 日時:2017/07/19 16:55
よしひろです。お世話になりました。
ご回答、ありがとうございます。
>「Visual Studio 2015」のフォルダの中によしひろさんが必要とされるファイルが無いのでしたら削除してしまって大丈夫だと思います
残しておくと、ウイルスバスターの例外設定の数が多くなりますので、「Visual Studio 2015」のフォルダを削除して例外設定の数を減らそうと思います。
これから、作りかけのプログラムを完成すべく頑張ります。
今後もよろしくお願いします。
|