Wie rufe ich WSAGetLastError()
von WinAPI, damit ich den gültigen Textfehler erhalte?Wie bekomme ich den letzten Fehler (WSAGetLastError)?
Antwort
[DllImport("ws2_32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern Int32 WSAGetLastError();
Auch auf pinvoke.net wird gesagt:
Sie sollten nie PInvoke zu GetLastError. Rufen Sie stattdessen Marshal.GetLastWin32Error!
Es ist nicht sehr sinnvoll, diese Funktion aus verwaltetem Code aufzurufen. Es macht Sinn in nicht verwaltetem Code, da Sie die genau letzte Win32-Funktion kennen, die aufgerufen wurde, damit Sie wissen, welche Funktion den letzten Fehler gesetzt haben muss. In verwaltetem Code wissen Sie nicht, welche Funktionen aufgerufen wurden.
Sie könnten wahrscheinlich P/Invoke verwenden, um die Funktion aufzurufen; Es würde dir einfach nicht gut tun. Was versuchst du zu erreichen?
WSAGetLastError
ist nur ein Wrapper für die Win32 GetLastError
Funktion. Wenn Sie mit P/Invoke arbeiten, können Sie den Parameter SetLastError
für das Attribut DllImport
verwenden. Es teilt .NET mit, dass die importierte Funktion SetLastError()
aufruft und dass der Wert gesammelt werden soll. Wenn die importierte Funktion fehlschlägt, können Sie den letzten Fehler mit Marshal.GetLastWin32Error()
erhalten. Alternativ können Sie auch nur throw new Win32Exception()
, die diesen Wert automatisch verwendet.
Wenn Sie nichts mit P/Invoke machen, haben Sie kein Glück: Es gibt keine Garantie, dass der letzte Fehlerwert lange genug erhalten bleibt, um ihn durch mehrere Ebenen von .NET-Code zurückzuverwandeln. In der Tat werde ich Adam Nathan verlinken: never define a PInvoke signature for GetLastError.
Dies ist, wie ich im Internet gesehen GetLastError in die C# Ausnahme stellen mechanismand wie man es bekommt wieder heraus ...
try
{
// some p/invoke call that is going to fail with a windows error ...
mHndActivatedDevice = MyNameSpace.Interop.Device.Device.ActivateDevice(
"Drivers\\BuiltIn\\SomeDriverName", IntPtr.Zero, 0, IntPtr.Zero);
}
catch(System.ComponentModel.Win32Exception exc) // as suggested by John Saunders
{
// you can get the last error like this:
int lastError = System.Runtime.InteropServices.Marshal.GetLastWin32Error();
Console.WriteLine("error:" + lastError.ToString());
// but it is also inside the exception, you can get it like this
Console.WriteLine(exc.NativeErrorCode.ToString());
Console.WriteLine(exc.ToString());
}
wo ActivateDevice so definiert ist:
-1: Der Code sollte Win32Exception, nicht Exception fangen. Andernfalls besteht die Möglichkeit, dass ein anderer Ausnahmetyp abgefangen wird, und der Fall von Win32Exception schlägt fehl. –
- 1. WSAGetLastError
- 2. Wie bekomme ich den ersten und letzten Datensatz in PHP
- 3. Wie bekomme ich den letzten Schlüssel im Array in Javascript?
- 4. Wie bekomme ich den letzten Buchstaben einer Zeichenkette?
- 5. Wie bekomme ich den letzten Datensatz von Sqlite?
- 6. Wie bekomme ich den letzten indizierten Datensatz in Solr?
- 7. Wie bekomme ich den letzten Tag eines Monats?
- 8. Wie bekomme ich den letzten Index von "%" in einem String?
- 9. Wie bekomme ich den letzten Ort auf Glas zuverlässig?
- 10. Wie bekomme ich den letzten Datensatz von Mysql mit Hibernate?
- 11. Wie bekomme ich den letzten Teil einer Zeichenkette?
- 12. Wie bekomme ich den letzten Teil von dirname in Bash
- 13. C# TextBox Wie bekomme ich den letzten Buchstaben einer Zeichenkette?
- 14. Wie bekomme ich letzten Donnerstag, inklusive?
- 15. Wie bekomme ich den letzten Datensatz vor dem letzten in mysql?
- 16. Ich bekomme immer den letzten Wert einer ArrayList
- 17. Wie kann ich eine Fehlerzeichenfolge von WSAGetLastError() abrufen?
- 18. Wie bekomme ich den ersten Tag und den letzten Tag des laufenden Jahres in C#
- 19. Wie bekomme ich den ersten Tag und den letzten des vorherigen Monats mit sql
- 20. Wie bekomme ich den Pfad ohne den letzten Ordner mit Ruby?
- 21. Wie bekomme ich den Teilstring in C#?
- 22. Wie bekomme ich den Teilstring
- 23. Wie bekomme ich den Attributsatznamen?
- 24. Wie bekomme ich den Batteriestatus?
- 25. Wie bekomme ich den Montageort?
- 26. Wie bekomme ich den Standort?
- 27. Wie bekomme ich den Druckerstatus?
- 28. Wie bekomme ich den Downloadstatus?
- 29. Wie bekomme ich den Referenztyp?
- 30. Wie bekomme ich letzten "besonderen (Ex. März)" Monat in PHP?
мерси! Kommentar.Länge = 10; –