Функции реестра C в Windows API - PullRequest
0 голосов
/ 04 апреля 2009

RegOpenKeyEx ()

Я хочу printf ("Success") или printf ("Failure") в зависимости от того, происходит ли сбой или успешное выполнение функции

Как бы я сделал такое условие, сохраняя его аккуратным и разборчивым?

Я хочу держаться подальше от этого:

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

Ответы [ 5 ]

3 голосов
/ 04 апреля 2009

Вы спрашиваете, как проверить, почему это не удалось?

"Ненулевой код ошибки, определенный в Winerror.h, указывает на ошибку. Чтобы получить общее описание ошибки, вызовите FormatMessage с установленным флагом FORMAT_MESSAGE_FROM_SYSTEM."

Итак. ERROR_SUCCESS, если выполнено, код ошибки в случае неудачи.

1 голос
/ 05 апреля 2009

Вы можете использовать новые строки, или называть вещи, или и то и другое,

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

или, возможно,

 LPCTSTR keypath = "HUGE LONG KYEY STRUCTURE HERE";
 if( RegOpenKeyEx(HKEY_LOCAL_MACHINE,keypath,0,KEY_SET_VALUE) != 0 ) {
     ...
1 голос
/ 04 апреля 2009

После проверки неотредактированного вопроса, я думаю, единственное, что вы можете сделать, это разбить утверждение на несколько утверждений, подобных этому:

const char* regKey = "BIG_STRING......";
DWORD errorCode = RegOpenKeyEx(...);
if(ERROR_SUCCESS == errorCode)
{ 
  //Rest of the code
}
else
{
  //Error handling
}
0 голосов
/ 04 апреля 2009

Вместо этого вы можете использовать троичный оператор:

bool success = (RegKeyOpenEx(...) == ERROR_SUCCESS);
printf("%s\n", success ? "Success" : "Failure");
0 голосов
/ 04 апреля 2009

Не возвращает ERROR_SUCCESS, когда это не удается. Это то, что вы имеете в виду?

для многократных проверок кодов ошибок используйте:

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" );
}
...