Điều thực sự thú vị là mã C# sau sẽ bị lỗi trên .NET4.0 nhưng hoạt động tốt trên .NET2.0.Tại sao AccessViolationException không thể bị bắt gặp bởi .NET4.0
C# code
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;
}
Nếu biên dịch mã # C trên chống lại .NET2.0, mọi thứ đều hoạt động tốt. Chỉ biên dịch nó với .NET4.0 sẽ làm cho nó bị lỗi khi chạy.
Tôi nghi ngờ rằng cơ chế bắt ngoại lệ hệ thống đã được thay đổi kể từ .NET4.0. Bất kỳ ý tưởng?
Câu trả lời hay. Cảm ơn rất nhiều!!!! Câu hỏi này làm tôi bối rối trong một thời gian dài. –
Tôi đã theo đuổi vấn đề này trong một tuần! Có một điều tôi có thể làm với trạng thái hỏng của mình là khởi động lại. Một ứng dụng giao diện điều khiển của nó * nên * chạy 24 giờ mỗi ngày. Bây giờ nó sẽ. – Andiih
@Andiih trừ khi các bit bị lỗi là mã sẽ khởi động lại nó. Tôi sẽ sử dụng cơ quan giám sát bên ngoài cho mục đích này. –