プロが教える店舗&オフィスのセキュリティ対策術

VC++の勉強中です。例外処理に対してあまり詳しくないですが。
問題が発生しました。VS2005 の環境です。分かったかたは
ご指摘お願いします。

今書いているソースには、 error C2712: オブジェクト アンワインディングが必要な関数内で __try を使用できません。というメッセージが出ていますが、今いろいろ調べています。Win32のAPIを使っているところ__try
__leaveなどのSEHの機構の例外処理のやり方です。
これをプロパティ-C/C++-コード生成/C++の例外を無効にすると、問題が
なく動くですが。

具体的に、どういう解決すればいいですが、C++の例外を無効にするわけに
いけないし。

よろしくお願いします。

A 回答 (1件)

あまり正確なところは分かりませんが。



__try ブロックと同じ関数内でデストラクタが呼ばれる場合に
そのエラーメッセージが出るようです。
「ブロック内」ではなく「関数内」なので、
以下のようにまとめて別関数とするだけで回避することができるようです。


void foo(){
  Biz biz;// 必要なオブジェクトを別関数に

  // 例外が起き得る処理
}

int main(){

  // デストラクタを回避するため
  // この関数内にオブジェクトがあってはならない

  __try {
    foo();
  }
  __except(EXCEPTION_EXECUTE_HANDLER){
    // ここから復帰を試みる場合の処理
  }

  return 0;
}

Windows API との関連は分かりませんでした。
以下のサイトも参考になさって下さい。

参考URL:http://msdn.microsoft.com/ja-jp/library/xwtb73ad …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています