2009-04-04 6 views
0

RegOpenKeyEx()Fonctions C Registre dans Windows API

Je veux printf (« succès ») ou printf (« non ») en fonction si la fonction échoue ou réussit

Comment puis-je faire comme un conditionnel tout en le gardant propre et lisible?

Je suis désireux de rester loin de là:

if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,"HUGE LONG KYEY STRUCTURE HERE",0,KEY_SET_VALUE) != 0) 
{ 
    //CODE 
} 
+0

Désolé Quelle est votre question? – RobS

+0

Je pense qu'il veut juste le rendre lisible. – gbarry

Répondre

0

Il ne retourne pas ERROR_SUCCESS quand il ne réussit pas. C'est ce que tu veux dire?

pour plusieurs contrôles de codes d'erreur utilisent:

LONG errors = 0; 

errors += abs(RegKeyOpenEx(HKEY_LOCAL_MACHINE,"HUGE LONG KYEY STRUCTURE HERE",0,KEY_SET_VALUE)); 
errors += abs(RegKeyOpenEx(HKEY_LOCAL_MACHINE,"HUGE LONG KYEY STRUCTURE HERE",0,KEY_SET_VALUE)); 
errors += abs(RegKeyOpenEx(HKEY_LOCAL_MACHINE,"HUGE LONG KYEY STRUCTURE HERE",0,KEY_SET_VALUE)); 
errors += abs(RegKeyOpenEx(HKEY_LOCAL_MACHINE,"HUGE LONG KYEY STRUCTURE HERE",0,KEY_SET_VALUE)); 
errors += abs(RegKeyOpenEx(HKEY_LOCAL_MACHINE,"HUGE LONG KYEY STRUCTURE HERE",0,KEY_SET_VALUE)); 

if(errors > 0) 
{ 
    print("OMG It went wrong!\n"); 
} 
else 
{ 
    print("Hero!\n"); 
} 
+0

Cela renvoie des codes d'erreur, pas des valeurs booléennes, vous devriez donc faire attention aux dépassements d'entiers et aux valeurs de retour positives/négatives. Même les fonctions API Win32 qui retournent BOOL peuvent renvoyer 1 ou -1 dans différentes situations (par exemple GetMessage). – bk1e

+0

@ bk1e - bon point J'étais juste un fainéant – Martlark

+0

@ bk1e - mais un coup d'oeil à winerror.h montre qu'il n'y a pas de codes d'erreur négatifs et le débordement devrait être assez improbable sauf si vous l'appelez plus d'un million de fois. Vos préoccupations sont sans fondement et sans instruction. – Martlark

3

Demandez-vous comment vérifier pourquoi il a échoué?

"Un code d'erreur non nul défini dans Winerror.h indique un échec Pour obtenir une description générique de l'erreur, appelez FormatMessage avec le jeu d'indicateurs FORMAT_MESSAGE_FROM_SYSTEM."

Donc .. ERROR_SUCCESS en cas de réussite, code d'erreur en cas d'échec.

1

Après avoir vérifié la question non éditée, je pense que la seule chose que vous pouvez faire est de briser la déclaration dans plusieurs déclarations comme celle-ci:

const char* regKey = "BIG_STRING......"; 
DWORD errorCode = RegOpenKeyEx(...); 
if(ERROR_SUCCESS == errorCode) 
{ 
    //Rest of the code 
} 
else 
{ 
    //Error handling 
} 
0

Vous pourriez plutôt utiliser l'opérateur ternaire:

bool success = (RegKeyOpenEx(...) == ERROR_SUCCESS); 
printf("%s\n", success ? "Success" : "Failure"); 
1

Vous pouvez utiliser des sauts de ligne ou de nommer les choses ou les deux,

LONG result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, 
          "HUGE LONG KYEY STRUCTURE HERE", 
          0,KEY_SET_VALUE); 
if(result != 0) { 
    ... 

ou peut-être

LPCTSTR keypath = "HUGE LONG KYEY STRUCTURE HERE"; 
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,keypath,0,KEY_SET_VALUE) != 0) { 
    ...