Действительно интересно, что следующий код С# будет сбой на .NET4.0, но отлично работает на .NET2.0.
Код С#
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();
}
Код С++
extern "C" __declspec(dllexport) int ExceptionTest()
{
IUnknown* pUnk = NULL;
pUnk->AddRef();
return 0;
}
Если компилировать вышеуказанный код С# на .NET2.0, все работает нормально. Только компиляция с .NET4.0 приведет к сбою во время выполнения.
Я подозреваю, что механизм исключения системных исключений был изменен с .NET4.0. Любые идеи?