以下C#代码在.NET 4.0上会崩溃,但在.NET 2.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以来,系统异常捕获机制发生了改变。有什么想法吗?