Mir geht es um das Erstellen des Rückgabewertes (HResult) für "QueryContextMenu".
Ich habe ein Programm geschrieben, bei dem ein Explorer-ContextmenuHandler benutzt wird, also eine
DLL. In dieser
DLL wird "QueryContextMenu" aufgerufen, wenn per
Com-Objekt meine MenuItems in das Explorer-Kontextmeü eingefügt werden sollen.
Worum es mir geht ist, den HResult-Rückgabewert korrekt zu erstellen. Derzeit weise ich einfach einen Zahlenwert zu, den ich statisch festlege.
Also zum Beispiel:
Delphi-Quellcode:
// wenn 2 MenuItems erstellt wurden, dann
Result := 2
Dieses Vorgehen habe ich aus einem
Tutorial übernommen. Ich bin jedoch nicht wirklich überzeugt, ob es nicht eine bessere Vorgehensweise gibt.
Auszug aus der
MSDN:
Return Value
If successful, returns an HRESULT value that has its severity value set to SEVERITY_SUCCESS and its code value set to the offset of the largest command identifier that was assigned, plus one. For example, assume that idCmdFirst is set to 5 and you add three items to the menu with command identifiers of 5, 7, and 8. The return value should be MAKE_HRESULT(SEVERITY_SUCCESS, 0, 8 - 5 + 1). Otherwise, it returns an OLE error value.
Wie hier die
MSDN erklärt, wird auch in einigen Beispielen mithilfe von MAKE_HRESULT der Rückgabewert erstellt.
C++-Beispiel:
Code:
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, USHORT(IDM_LAST + 1));
Siehe
http://support.microsoft.com/kb/179911/de.
Ich verstehe die Zusammenhänge jedoch nicht komplett, wie HRESULT "zusammengebaut" wird und würde mich freuen, wenn mir das jemand "auf gut Deutsch" erklären würde, oder ein Tutorial / eine Erklärung verlinken würde, bei dem auch ich durchblicke.
Guido.