SORU
12 AĞUSTOS 2010, PERŞEMBE


Nasıl AccessViolationException işlemek için

Bir COM nesnesi (MODİ) benim içinde kullanıyorum .net uygulama. Arıyorum yöntemi bir Sistem atar.Visual Studio tarafından ele olan AccessViolationException,. Tek şey var sarılmış telefonumu bir catch, olan işleyicileri için AccessViolationException, COMException ve her şey, ama ne zaman Visual Studio (2010) karşılar, AccessViolationException, hata ayıklayıcı sonları yöntemi (doc.OCR), ve eğer yanlış bir şey yaparsam, catch bloğu girmek yerine, bir sonraki satıra devam eder. Eğer visual studio bunun dışında çalıştırırsanız ayrıca, uygulama çöker. Nasıl bir COM nesnesi içinde atılan bu istisna işleyebilir miyim?

MODI.Document doc = new MODI.Document();
try
{
    doc.Create(sFileName);
    try
    {
        doc.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, false, false);
        sText = doc.Images[0].Layout.Text;
    }
    catch (System.AccessViolationException ex)
    {
        //MODI seems to get access violations for some reason, but is still able to return the OCR text.
        sText = doc.Images[0].Layout.Text;
    }
    catch (System.Runtime.InteropServices.COMException ex)
    {
        //if no text exists, the engine throws an exception.
        sText = "";
    }
    catch
    {
        sText = "";
    }

    if (sText != null)
    {
        sText = sText.Trim();
    }
}
finally
{
    doc.Close(false);

    //Cleanup routine, this is how we are able to delete files used by MODI.
    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(doc);
    doc = null;
    GC.WaitForPendingFinalizers();
    GC.Collect();
    GC.WaitForPendingFinalizers();

}

CEVAP
21 Ocak 2011, Cuma


.NET çalışma zamanı, bazı özel durumlar Windows gibi kaldırdı kolları 4.0, Hata (SEH) Bozuk Devlet göstergeleri olarak hataları İşleme Yapılandırılmış. Bu Bozuk duruma özel (EE) standart yönetilen kod tarafından yakalanmak izin verilmez. Neden ya da nasıl buraya alamam. Bu IV ile ilgili bu makaleyi okuyun .NET 4.0 Çerçeve:

http://msdn.microsoft.com/en-us/magazine/dd419661.aspx#id0070035

Ama umut var. Bu etrafında almak için birkaç yolu vardır:

  1. Bir olarak yeniden derleyin .NET 3.5 montaj ve çalıştırın .NET 4.0.

  2. /Çalışma öğesi yapılandırma altında uygulamanızın yapılandırma dosyası eklemek için bir satır: <legacyCorruptedStateExceptionsPolicy enabled="true|false"/>

  3. Bu özel durumlar HandleProcessCorruptedStateExceptions öznitelik ile yakalamak istediğiniz yöntemleri süsleyin. Ayrıntılar için http://msdn.microsoft.com/en-us/magazine/dd419661.aspx#id0070035 bkz.

Daha fazla referans için: http://connect.microsoft.com/VisualStudio/feedback/details/557105/unable-to-catch-accessviolationexception

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Feel The Electricity!

    Feel The Ele

    20 ŞUBAT 2010
  • Mega64

    Mega64

    24 ŞUBAT 2006
  • TheDamnWreckless

    TheDamnWreck

    12 Temmuz 2010