很有趣的是,下面的 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;
}
如果针对 .NET2.0 编译上述 C# 代码,一切正常。仅针对 .NET4.0 编译它会使其在运行时崩溃。
我怀疑系统异常捕获机制自.NET4.0 以来已经改变。有任何想法吗?