2013-07-03 9 views
5

Jestem zakłopotany, zastanawiając się, dlaczego błędne zapytanie konta gmail w programie Outlook powoduje awarię mojej aplikacji zamiast po prostu zgłaszać wyjątek. Wydaje się, że istnieje nieprzechwycony wyjątek win32 oparty na wywołaniu kodu z niezarządzanego C++. Błąd zniknie, gdy zmieniam lokalizację profilu Outlook. Nadal nie rozumiem, dlaczego mój kod .NET nie może złapać wyjątku, ponieważ zagnieżdżono> 20 wyjątków, aby spróbować złapać problem.Awaria adaptera danych wypełniających

Nie mogę również bezpośrednio debugować kodu w .NET, ponieważ nie jestem w stanie ustawić STAAttribute i mój kompilator Visual Studio 2010 Professional nie pozwala mi na debugowanie kodu C++/CLI. http://winterdom.com/2007/02/jetmapiandsta

Błąd zapytanie jest proste z # brakuje na randkę SELECT * FROM inbox WHERE Body Like '%BWIC%' And rECEIVED>=#07/26/2012

Próbowałem dodając wiele wyjątków do instrukcji catch, ale nie może zapobiec katastrofie.

System::Data::DataSet ^db_DataSet=gcnew System::Data::DataSet; 
int const Fill_Result=db_Adapter.Fill(db_DataSet); 
} 
catch (System::Exception ^ex) { 
    ex; 
} 
catch (...) { 
    ; 
} 
finally { 
    if (db_Conn) 
     db_Conn.close(); 
} 
+0

Mam dziś do czynienia z tym samym problemem, czy znalazłeś rozwiązanie tego problemu. – MansoorShaikh

+0

Czy możesz utworzyć SSCCE, którą ktoś może uruchomić na swoim komputerze? – sashoalm

+0

Który wyjątek Win32? Wydaje się, że jest to wyjątek zewnętrzny. Czy używasz COM? – Andro

Odpowiedz

1

Spójrz na wątek This. To może być pomocne.

Zgodnie z nim można wychwycić wyjątek w macierzystym środowisku i wyrzucić wyjątek do zarządzanego świata.

#include <exception> 


try 
{ 
    try 
    { 
     Application::Run(gcnew frmMain()); 
    } 
    catch(const exception& ex) 
    { 
     throw gcnew System::Exception(gcnew System::String(ex.what())); 
    } 
} 
catch (Exception^ ex) 
{ 
    LogAndExit(ex); 
} 
catch (...) 
{ 
    LogAndExit(); 
}