Welche Werte zurückgeben S_OK oder E_FAIL von c# .net-code?

Ich bin Implementierung einer COM-Schnittstelle, die int-Werte zurückgeben sollte entweder S_OK oder E_FAIL. Ich bin ok Rückkehr S_OK wie bekomme ich diese wieder von einem anderen Anruf (Marschall.QueryInterface), aber wenn ich will, um wieder eine Fehler-Wert, was den tatsächlichen Wert verwende ich für E_FAIL?

(Es ist so einer grundlegenden Frage, die es schwer eine Antwort darauf zu finden)

Vorausgesetzt, es ist eine bestimmte Zahl definiert, die in der Win32-API, ist es Weg, es zu benutzen in .net-code, ohne Sie zu deklarieren meine eigene Konstante?

Dank!

Update (Antwort unten):

Vielleicht bin ich ein kompletter plonker, aber ich habe Probleme mit diesem. Nach meiner Platform SDK, HRESULT ist eine LANGE, eine 32-bit-Ganzzahl mit Vorzeichen, richtig? Also mögliche Werte zwischen-2.147.483.648 bis 2.147.483.647. Aber 0x80004005 = 2,147,500,037 die > 2,147,483,647. Was gibt!?

Bedeutet dies, wenn ich versuche, dies in meinen code:

const int E_FAIL = 0x80004005;

Bekomme ich einen compiler-Fehler kann Nicht implizit konvertiert Typ 'uint' in 'int'.

Update 2:

Werde ich es zu erklären wie diese:

const int E_FAIL = -2147467259;

weil wenn ich es versuche, so etwas zu tun:

const UInt32 E_FAIL = 0x80004005;
return (Int32)E_FAIL;

Bekomme ich einen compiler-Fehler Konstanten Wert '2147500037' kann umgewandelt werden in ein 'int' (mit 'deaktiviert' syntax überschreiben)

Puh! Wer weiß, wie schwierig es sein würde, zu erklären, ein standard-Wert zurück.... Irgendwo muss es eine Klasse sein lauern, die ich haben sollte wie zurück Win32ReturnCodes.E_SCHEITERN; ... Seufzer

ULTIMATIVE LÖSUNG:

Ich jetzt tun dies, indem Sie die (massive, aber sehr nützlich) HRESULT enum aus pinvoke.net und hinzufügen zu meiner Lösung. Dann verwenden Sie so etwas wie dieses:

return HRESULT.S_OK;

InformationsquelleAutor der Frage Rory | 2008-12-12

Schreibe einen Kommentar