Wie bekomme ich den letzten Fehler (WSAGetLastError)?

8

Wie rufe ich WSAGetLastError() von WinAPI auf, damit ich den gültigen Textfehler bekomme?

    
Ivan Prodanov 19.04.2009, 14:28
quelle

4 Antworten

20
%Vor%

Auch auf pinvoke.net heißt es:

  

Sie sollten PInvoke niemals auf GetLastError setzen. Rufen Sie stattdessen Marshal.GetLastWin32Error auf!

System.Runtime.InteropServices.Marshal.GetLastWin32Error ()

    
abatishchev 19.04.2009, 14:49
quelle
7

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 .

    
Roger Lipscombe 19.04.2009 14:34
quelle
0

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?

    
John Saunders 19.04.2009 14:34
quelle
-2

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:

    
David Fort 16.07.2009 22:15
quelle