4


VMWare または Virtual PC http://www.codeproject.com/KB/system/VmDetect.aspxの検出に関するこの記事に出くわし、
ある種の try-except ステートメントを使用していることがわかりました。
だから私はMSDNでそれを調べました: http://msdn.microsoft.com/en-us/library/s58ftw19%28v=vs.80%29.aspx

古き良きtry-catchの代わりにtry-exceptを使用する理由がわかりません。例外に関する追加情報を提供するだけですか?
もしそうなら、添付記事のコードを使うとtry-catchが使えますよね?
ありがとう :)

4

5 に答える 5

6

__try/__except 、別の種類の例外のtry/です。catchC++ 例外ではなく、浮動小数点違反、無効なポインター逆参照などのハードウェア例外をキャッチできます。これは、構造化例外処理 (SEH) と呼ばれます。MSDN には、どこを見ればよいかを知っていれば、かなりの情報があります。

この場合、無効な命令を検出するために使用しています。これは、x86 がサポートしていない命令を実行しようとする場所であり、仮想マシンはそれらを使用します。実際の CPU で実行している場合は、無効な命令の例外が発生します。仮想マシンで実行している場合は、それと対話しただけです。

于 2011-07-06T17:32:31.327 に答える
2

MSDN は通常、これらすべてについて不明ですが、__try/で処理される例外__exceptは C++ の例外ではなく、システムの例外です。セグメンテーション違反のようなもの。

于 2011-07-06T17:29:41.327 に答える
2

とは構造化例外処理__tryの一部です。これは、ハードウェア例外をソフトウェア例外と同じように処理するため、標準モデルとは異なる例外処理モデルです。詳細については、リンクを参照してください。__except

于 2011-07-06T17:34:26.437 に答える
1

Microsoft は、実際の C++ 標準に例外が含まれるようになる前に、Microsoft C++ 用の構造化例外処理を作成しました。したがって、Windows では、存在する例外はすべて SEH 例外ですが、すべてが C++ 例外というわけではありません。

__try / __except は、SEH 例外 (および偶然にも C++ 例外) をキャッチする方法です。try/catch は、C++ 例外のみをキャッチする方法です。また、1つの機能で両方を使用できないという制限があることも思い出しますが、それを回避するのは簡単です.

使用するには、例外に対して try/catch を使用してください。誰かが明示的に SEH 例外 (ゼロ除算、null ポインター逆参照など) をスローした場合は、それをキャッチして、通常の例外にするか、ソフトウェアを停止するなど、できるだけ早く通常のプログラム フローに変換します。

于 2011-07-06T17:34:41.890 に答える
1

、および句は、__try構造化された例外処理用です。これは、Windows によってスローされた例外の例外処理メカニズムです。それらは C++ 例外と同じではありません。__except__finally

于 2011-07-06T17:36:16.403 に答える