.Net uygulamamdan bir COM nesnesi (MODI) kullanıyorum. Aradığım yöntem Visual Studio tarafından kesilen bir System.AccessViolationException atar. Garip olan şey, AccessViolationException, COMException ve diğer her şey için işleyicileri olan bir denemede aramamı tamamladım, ancak Visual Studio (2010) AccessViolationException'ı engellediğinde, hata ayıklayıcı yöntem çağrısında (doc.OCR) kesiyor, ve eğer adım atarsam, catch bloğuna girmek yerine bir sonraki satıra devam eder. Ayrıca, bunu görsel stüdyo dışında çalıştırırsam, uygulama çöküyor. COM nesnesi içine atılan bu özel durumu nasıl işleyebilirim?
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();
}
Exception
Tüm istisnaları yakalamak ve istisnanın gerçekte ne olduğunu görmek için (geçici olarak!) Bir işleyici koymayı denediniz mi?