Kann es in C# zu einer nativen Ausnahmeumgehung kommen?
Bei der Arbeit mit externen, nicht verwalteten Bibliotheken in C# ist es wichtig, die Möglichkeit einer solchen Konfrontation in Betracht zu ziehen native Ausnahmen, die ihren Ursprung tief in diesen Bibliotheken haben.
Kann Standard Try...Catch Capture Native Ausnahmen?
Glücklicherweise bietet C# auch einen Mechanismus zum Abfangen nativer Ausnahmen. Die Frage ist: Können Standard-Try...Catch-Blöcke diese nicht verwalteten Ausnahmen ohne Änderungen verarbeiten?
Antwort: Native Ausnahmen abfangen
Um native Ausnahmen abzufangen, können Sie dies tun Verwenden Sie die Win32Exception-Klasse. Es bietet eine Eigenschaft namens NativeErrorCode, mit der Sie den Fehlercode untersuchen und bestimmte Fälle entsprechend behandeln können.
Betrachten Sie beispielsweise den folgenden Codeausschnitt:
const int ERROR_FILE_NOT_FOUND = 2; const int ERROR_ACCESS_DENIED = 5; const int ERROR_NO_APP_ASSOCIATED = 1155; void OpenFile(string filePath) { Process process = new Process(); try { // Calls native application registered for the file type // This may throw a native exception process.StartInfo.FileName = filePath; process.StartInfo.Verb = "Open"; process.StartInfo.CreateNoWindow = true; process.Start(); } catch (Win32Exception e) { if (e.NativeErrorCode == ERROR_FILE_NOT_FOUND || e.NativeErrorCode == ERROR_ACCESS_DENIED || e.NativeErrorCode == ERROR_NO_APP_ASSOCIATED) { MessageBox.Show(this, e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } }
In diesem Beispiel versuchen wir es um eine native Anwendung zu starten, die einem bestimmten Dateityp zugeordnet ist. Wenn die Anwendung nicht gestartet werden kann, wird eine Win32Exception mit einem zugehörigen Fehlercode ausgelöst. Die if-Anweisung im Catch-Block prüft auf bestimmte Fehlercodes und zeigt eine entsprechende Meldung an.
Das obige ist der detaillierte Inhalt vonKann Standard-C# try...catch-Blöcke mit nativen Ausnahmen aus nicht verwalteten Bibliotheken umgehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!