非常有趣的是,以下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();
}
Run Code Online (Sandbox Code Playgroud)
C++代码
extern "C" __declspec(dllexport) int ExceptionTest()
{
IUnknown* pUnk = NULL;
pUnk->AddRef();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果针对.NET2.0编译上面的C#代码,一切正常.只针对.NET4.0进行编译会使其在运行时崩溃.
我怀疑自.NET4.0以来系统异常捕获机制已经改变.有任何想法吗?