3 Stimmen

Arbeiten mit HResult, Interop und ähnlichen Dingen in C#

Ich arbeite an einem Projekt in C#, um eine Formularanwendung zu erstellen. Ich möchte IFileDialog und andere Funktionen verwenden, die Teil der nativen Windows-API ist (oder wie auch immer ti genannt werden sollte).

Am Anfang wusste ich absolut nichts über Interop oder die Windows-API. Ich fange an zu lernen, aber manchmal kann es schwierig sein, grundlegende Informationen über bestimmte Aspekte zu finden. Daher habe ich eine (wahrscheinlich trivial / dumm) Fragen:

HResultate werden häufig verwendet. Soweit ich weiß, sind HResults nichts anderes als eine 32-Bit-Entität, bei der die verschiedenen Bits Informationen über das Ergebnis bestimmter Operationen liefern. In einigem Code, den ich online gefunden habe, sehe ich oft Dinge wie int hres = -2147467259; . Als absoluter Laie habe ich nachgesehen, was das bedeutet. -2147467259 es 0xFFFFFFFF80004005 und in der Online-Dokumentation bei MSDN kann ich sehen, dass 0x80004005 bedeutet E_FAIL auch bekannt als nicht spezifizierter Fehler. Meine Frage ist, was es mit dem FFFFFFFF Teil? Hätten sie nicht einfach die int hres = 0x80004005 ? Vielleicht ist das sehr offensichtlich und ich bin ein totaler Anfänger, aber trotzdem :)

2voto

ParmesanCodice Punkte 4992

Der FFFFFFFF-Teil liegt daran, dass Ihr HResult negativ ist.

So speichern Computer negative Zahlen mit Zweierkomplement .

Sehen Sie sich diese Berechnung an (meine Hervorhebung):
-2147467259 = 0xFFFFFFFF 80004005
-2147467259 + 2^32 (Rollover) = 2147500037 = 0x 80004005

0voto

Motti Punkte 104854

Auf 32-Bit-Plattformen wird ein int ist 32 Bits lang, das sind 4 Bytes mit 8 hexadezimalen Ziffern. Also E_FAIL wäre 0x80004005 (was der von Ihnen eingefügte Code anzeigt). Wenn Sie diesen Wert auf einem 64-Bit-Rechner ausgeben, wird er doppelt so viel Speicherplatz beanspruchen, und da Zahlen vorzeichenerweitert sind und die führende 8 (binär 100 ) bedeutet das Vorzeichenbit ist 1 dann sind es nur Einsen. 1111 im Binärformat ist F in Hex, die alle F s Sie sehen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X