次のC#コードが.NET4.0でクラッシュするが、.NET2.0では正常に動作することは非常に興味深いことです。
C#コード
class Program
{
static void Main(string[] args)
{
try
{
ExceptionTest();
Console.WriteLine("Done!");
}
catch (Exception e)
{
Console.WriteLine("Error !!!");
Console.WriteLine(e.Message);
}
}
[DllImport("badapp")]
private static extern int ExceptionTest();
}
C++コード
extern "C" __declspec(dllexport) int ExceptionTest()
{
IUnknown* pUnk = NULL;
pUnk->AddRef();
return 0;
}
上記のC#コードを.NET2.0に対してコンパイルすると、すべて正常に機能します。.NET4.0に対してコンパイルするだけで、実行時にクラッシュします。
.NET4.0以降、システム例外のキャッチメカニズムが変更されたのではないかと思います。何か案は?