none
CLRと例外のcatchブロック内のオブジェクトのデストラクタ RRS feed

  • 全般的な情報交換

  • 2つのDLL unmanage.dllとmanage.dllがあります。

    unmanage.dllは非CLRで、manage.dllは/CLRでコンパイルしてあります。

    環境はVC2008です。

     

    unmanage.dllの関数をmanage.dllから呼び出しています。

     

    unamnage.dll側

    Code Snippet

     

    class MyEx{...};

    class MyData{...};

     

    void Func()

    {

    try{

    ...

    }catch(...){

    MyData data;

    ...

    throw MyEx;

    }

    }

     

    この関数Func()をmanage.dll側から呼びます

     

    manage.dll側

    Code Snippet

     

    void FuncCall()

    {

    try{

    Func();

    } catch (MyEx& e){

    ...

    }

    }

     

     

    こうすると、unmanage.dll側のFunc()のtryブロック内で例外が発生したとき、catchブロック内のMyData dataオブジェクトのデストラクタが呼ばれません。FuncCall()側でcatchはできているのですが、その際dataのデストラクタが呼ばれないのです。

    しかも、manage.dllを非clrでコンパイルすると、dataのデストラクタが呼ばれます。

    manage.dllを/clrでコンパイルすると、dataのデストラクタが呼ばれないのはなぜでしょう。

     

    2008年2月15日 2:39

すべての返信

  • 自己resですが、英語Forumのほうで同様のがありました。
    http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1219923&SiteID=1
    /EHsと/EHaはnot compatibleだそうです...。


    2008年2月16日 0:37
  • こんにちは。フォーラムオペレータの栗原麻里 です

     

    kotano1 さん、フォーラムのご利用ありがとうございます。

     

    貴重な情報をありがとうございました。
    情報を有効活用するために勝手ながら、メッセージの種類をコメントに
    変えさせていただきました。


    それでは、ぜひまたご活用ください!

     

    2008年4月18日 6:44