Wenn E_POINTER und E_INVALIDARG zurückgegeben werden?

9

COM-Schnittstellen-Methoden können verschiedene HRESULT -Werte zurückgeben, um ungültige ungültige Argumente zu signalisieren. Wann gebe ich E_POINTER und wann E_INVALIDARG zurück?

Wie ich weiß, wenn eine Methode einen Index in einer gekapselten Sammlung empfängt und außerhalb der Grenzen liegt, ist E_INVALIDARG . Wenn eine Methode einen Interface** -Zeiger empfängt, in dem ein Zeiger auf ein neu erstelltes Objekt gespeichert werden soll, das E_POINTER ist.

%Vor%

Aber was ist, wenn es einen WCHAR* Puffer mit einem Dateinamen als "in" -Parameter erhält und dieser WCHAR* null ist? Ist dies E_POINTER oder E_INVALIDARG ?

Oder eine Methode empfängt einen Zeiger auf irgendeine Struktur und wird erwartet, die Struktur durch diesen Zeiger zu füllen, und dieser Zeiger ist Null - ist das E_POINTER oder E_INVALIDARG ?

%Vor%

Was sind die Regeln für die Rückgabe von E_POINTER und für E_INVALIDARG bei der Überprüfung von Zeigertyp-Parametern?

    
sharptooth 15.09.2009, 11:47
quelle

1 Antwort

10

Sie geben E_POINTER zurück, wenn der Verweis auf den Zeiger eines Parameters out null ist. Dies wird als Fehlercode betrachtet, der auf einen Fehler im Programm oder in der Interop-Ebene hinweist.

Sie geben E_INVALIDARG zurück, wenn eine Anwendungsebene mit dem Parameter aktiviert ist, zum Beispiel außerhalb des Bereichs oder kollidierende Parameter.

In Ihrem Fall sollten Sie in SaveToFile(...) E_INVLIADARG zurückgeben, da es nicht zulässig ist, einen leeren Dateinamen zu übergeben, und in GetAttributes(...) sollten Sie E_POINTER zurückgeben (wenn es ein out-Parameter ist), weil Sie nicht füllen können der Wert.

Und ja, wir alle L-O-V-E com:)

    
Shay Erlichmen 15.09.2009, 12:27
quelle

Tags und Links