Wie rufe ich WSAGetLastError()
von WinAPI auf, damit ich den gültigen Textfehler bekomme?
Auch auf pinvoke.net heißt es:
Sie sollten PInvoke niemals auf GetLastError setzen. Rufen Sie stattdessen Marshal.GetLastWin32Error auf!
WSAGetLastError
ist nur ein Wrapper für die Win32% Funktion co_de%.
Wenn Sie mit P / Invoke arbeiten, können Sie den Parameter GetLastError
für das Attribut SetLastError
verwenden. Es teilt .NET mit, dass die importierte Funktion DllImport
aufruft und dass der Wert gesammelt werden soll.
Wenn die importierte Funktion fehlschlägt, können Sie den letzten Fehler mit SetLastError()
erhalten. Alternativ können Sie auch Marshal.GetLastWin32Error()
angeben, das 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ück zu führen. In der Tat werde ich mit Adam Nathan verlinken: definiere nie eine PInvoke-Signatur für GetLastError .
Es macht wenig Sinn, diese Funktion aus verwaltetem Code aufzurufen. Es macht Sinn in nicht verwaltetem Code, da Sie genau die letzte Win32-Funktion kennen, die aufgerufen wurde, damit Sie wissen, welche Funktion den letzten Fehler gesetzt haben muss. Im verwalteten 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?
So habe ich im Web gesehen, dass GetLastError in den C # -Ausnahmemechanismus eingefügt wurde und wie man es wieder herausbekommt ...
%Vor%wo ActivateDevice so definiert ist:
Tags und Links .net c# error-handling winapi pinvoke