Errno.h Fehlerwerte in Win32 GetLastError () Äquivalente konvertieren

8

Ich schreibe eine Ebene zwischen POSIX-Dateisystem und Windows mit Dokan , und müssen konvertiert werden Fehlerwerte der errno-Art ( EINVAL , ENOENT , usw.), zu den Win32-Entsprechungen empfangen, wenn GetLastError() aufgerufen wird (z. B. ERROR_INVALID_PARAMETER ).

Gibt es eine vorhandene Funktion, Bibliothek oder Referenz, die ich für diese Konvertierungen verwenden kann?

Ich stöbere in der Regel durch die Python-Quelle, um mich zu diesen Dingen inspirieren zu lassen, aber Python vermeidet diese Notwendigkeit (zumindest soweit ich das beurteilen kann).

Als Beispiel würde EINVAL (22) in ERROR_INVALID_PARAMETER (87) konvertieren.

    
Matt Joiner 17.10.2010, 07:02
quelle

2 Antworten

9

Ich hatte in der Vergangenheit ein Experiment zu diesem Thema gemacht, hauptsächlich basierend auf Microsoft DOSMAP.CPP Einheit. Ich habe das Projekt zu diesem Zeitpunkt jedoch abgebrochen, da die Fehlerzuordnung für bestimmte Fehlercodes nicht immer richtig war. Zum Beispiel gibt nicht jede POSIX-Version EINVAL für ERROR_INVALID_ACCESS zurück, einige geben stattdessen EACCES zurück. Ich hatte auch einen Vergleich zwischen errno.h Systemfehlerzahlen von POSIX.1-2008 und DOSMAP.CPP , mingw.c , Postgresql error.c , tclWinError.c , MySQL my_winerr.c und viele mehr; manchmal unterscheiden sich die Zuordnungsregeln für bestimmte Fehlercodes. Persönlich schlage ich vor, dass Sie nur mit der konsistenten Fehlercode-Zuordnung zwischen ihnen umgehen.

    
Vantomex 17.10.2010, 10:34
quelle
4

Für jedes errno gibt es im Allgemeinen viele mögliche GetLastError -Werte, also was du denkst, ist möglicherweise nicht unbedingt machbar.

Wie auch immer, ich habe einfach "errno to getlasterror" gegoogelt, und der erste Google-Treffer war diese Korrespondenzliste aus den Cygwin-Quellen.

Es ist der falsche Weg, GetLastError bis errno , aber vielleicht hilfreich?

Prost & amp; hth.

    
Cheers and hth. - Alf 17.10.2010 07:20
quelle

Tags und Links