Ich implementiere eine COM-Schnittstelle, die Int-Werte entweder S_OK
oder E_FAIL
zurückgeben sollte. Ich bin ok, S_OK
zurückgeben, wie ich das von einem anderen Aufruf (Marshal.QueryInterface) zurückbekomme, aber wenn ich einen Fehlerwert zurückgeben möchte, welchen tatsächlichen Wert verwende ich für E_FAIL
?Welche Werte sollen für S_OK oder E_FAIL von C# .net code zurückgegeben werden?
(Es ist so eine fundamentale Frage, dass es schwer ist, eine Antwort zu finden)
Angenommen, es ist eine bestimmte Anzahl in dem Win32-API definiert ist, ist es so, wie es in .net Code zu verwenden, ohne meine eigene Konstante erklärt ?
danke!
Update (beantwortet unten):
ich sein ein komplettes plonker Mag sein, aber ich habe Probleme mit diesem haben. Laut meinem Platform SDK ist HRESULT ein LONG, eine 32-Bit-Ganzzahl mit Vorzeichen, richtig? So mögliche Werte -2.147.483.648 bis 2.147.483.647. Aber 0x80004005 = 2.147.500.037 was> 2.147.483.647 ist. Was gibt!? Diese
bedeutet, wenn ich versuche, dies in meinem Code zu setzen:
const int E_FAIL = 0x80004005;
ich ein Compiler-Fehler kann nicht implizit Typ ‚uint‘ auf ‚int‘ konvertieren.
Update 2:
Ich werde es wie folgt erklären:
const int E_FAIL = -2147467259;
weil, wenn ich versuche, so etwas zu tun:
const UInt32 E_FAIL = 0x80004005;
return (Int32)E_FAIL;
ich bekommen Compiler-Fehler Der konstante Wert '2147500037' kann nicht in 'int' konvertiert werden (verwenden Sie die 'unchecked' Syntax zum Überschreiben)
Puh! Wer wusste, wie schwierig es wäre, einen Standard-Rückgabewert zu deklarieren .... Irgendwo muss eine Klasse lauern, die ich hätte verwenden sollen wie return Win32ReturnCodes.E _
FAIL; ... Seufzer
ultimative Lösung:
Ich mache das jetzt durch die (massiv, aber sehr nützlich) bekommen HRESULT Enum von pinvoke.net und Hinzufügen zu meiner Lösung. Dann nutzen Sie es so etwas wie dieses:
return HRESULT.S_OK;
Dank für all die Hilfe! – Rory
Link gestorben, siehe [Allgemeine HRESULT-Werte hier] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa378137 (v = vs.85) .aspx) – bland
Ich habe den Link für aktualisiert 'winerror.h', es gibt viele Referenzen da draußen, nur für den Fall, dass die Verbindung wieder bricht, eine sehr einfache Suche wird es bekommen (auch wenn Sie einen C++ - Compiler auf Ihrem Rechner haben, wird es wahrscheinlich ein WinError.h sein datei dort) –