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.
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
?
Was sind die Regeln für die Rückgabe von E_POINTER
und für E_INVALIDARG
bei der Überprüfung von Zeigertyp-Parametern?
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:)
Tags und Links windows pointers com com-interop