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

  • Dirty Loops

    Dirty Loops

    21 Mayıs 2007
  • kidrauhl

    kidrauhl

    15 Ocak 2007
  • SelmerSaxMan

    SelmerSaxMan

    24 HAZİRAN 2006