Ich mache einige Programmierung in Win32 + WTL, und ich bin verwirrt mit den verfügbaren Arten von Fehlern.Fehler in Windows - DWORD (GetLastError) vs HRESULT vs LSTATUS
Im Allgemeinen möchte ich nach einem Fehler suchen und es an AtlGetErrorDescription einspeisen (die FormatMessage aufruft).
Meine Fragen sind: von GetLastError
DWORD
, kehrte:Was ist der Unterschied zwischen ist.
HRESULT
, zurückgegeben von z.B. derCAtlFile
Wrapper, derHRESULT_FROM_WIN32
verwendet, um vonDWORD
zu konvertieren.LSTATUS
, zurückgegeben von z.B.RegCreateKeyEx
.
Welche Arten von Fehlern kann ich an FormatMessage
liefern? Seine Signatur zeigt an, dass es HRESULT
akzeptiert, aber es gibt viele Beispiele, bei denen der Rückgabewert GetLastError
direkt an FormatMessage
übergeben wird.
Vielen Dank für die ausführliche Antwort. Bedeutet das, dass 'FormatMessage' sowohl 'GetLastError()' als auch 'HRESULT_FROM_WIN32 (GetLastError())' 'behandeln kann? Auch verstehe ich nicht, warum manchmal ATL-Wrapper den WINAPI-Fehlercode (z. B. "CRegKey") und manchmal den "HRESULT" -Code (z. B. "CAtlFile") zurückgeben. Ist es in Ordnung, entweder das Ergebnis in einem DWORD zu behalten und den Fehler, falls vorhanden, an "FormatMessage" zu übergeben? – Paul
ATL ist stark auf COM ausgerichtet, so dass COM-Fehlercodes nicht ungewöhnlich sind. Aber ja, es ist nicht konsequent darüber. Gehen Sie einfach zum Rückgabetyp, um den Unterschied zu sehen. Und ja, es ist nicht so, dass Sie ein anderes Oracle als FormatMessage() haben, um Ihnen eine Zeichenfolge zu geben. –
Sie haben noch nicht geantwortet, ob 'FormatMessage' beide Arten von Fehlermeldungen akzeptiert. Ich schätze, ich probiere es einfach aus :) Eine weitere Unannehmlichkeit ist, dass sie verschiedene Möglichkeiten haben, Erfolg/Misserfolg anzuzeigen - '== ERROR_SUCCESS' vs' SUCCEEDED'. Also gibt es vielleicht keinen anderen Weg, als bei einem der beiden zu bleiben - und weil AFAIK es nicht möglich ist, 'HRESULT' in den WINAPI-Fehlercode zu konvertieren, würde ich wohl' HRESULT' verwenden müssen. Das ist ziemlich nervtötend, da ich 'HRESULT_FROM_WIN32' ziemlich oft verwenden müsste. – Paul