2010-04-08 7 views
3

Définition de RÉUSSI(): #define SUCCEEDED(hr) (((HRESULT)(hr)) >= 0)Quelle constante littérale HRESULT échouera la macro SUCCEEDED()?

Contexte: Quand un bouton OK est cliqué sur une boîte de dialogue, je dois retourner une valeur HRESULThr telle que SUCCEEDED(hr) est vrai. Si le bouton Annuler est cliqué, je dois retourner une valeur négative. J'aurais pu utiliser des booléens, mais cela briserait le modèle existant (généralement les valeurs hr proviennent des profondeurs des DLL système). Donc, je sais que je peux retourner S_OK sur Ok, mais qu'est-ce que je retourne sur Annuler? Je pourrais juste return (HRESULT)-1;, mais il doit y avoir un meilleur moyen - une constante littérale HRESULT qui a une valeur négative et représente un échec générique. S_FALSE n'est-ce pas, car sa valeur est définie comme 1L.

S'il vous plaît aidez-moi à trouver la bonne constante.

Répondre

6

Peut-être E_ABORT

+0

Merci ... donc toutes les valeurs de E_ * échoueraient 'SUCCEEDED (hr)'? –

+1

Oui, ils le feraient. –

6

ou E_ABORT. Cependant, cela ne fait que soulever un problème plus important que vous ne devriez jamais utiliser SUCCEEDED(hr) si vous voulez juste vérifier par rapport à S_OK.

+2

+1. D'accord, utiliser SUCCEEDED est faux ici. S_FALSE est la valeur de retour logique pour une boîte de dialogue annulée, donc comparez à S_OK. –

3

Comme Kyle Alons said, E_ABORT (ou E_FAIL) pourraient bien travailler à votre objectif ou vous pouvez concevoir votre propre en utilisant la macro MAKE_HRESULT() ou HRESULT_FROM_WIN32() s'il y a un code d'erreur Win32 qui correspond à ce que vous voulez indiquer.

Peut-être HRESULT_FROM_WIN32(ERROR_CANCELLED)?