0

RegOpenKeyEx()

我想 printf("Success") 或 printf("Failure") 取决于函数是失败还是成功

我将如何在保持整洁和易读的同时做这样的条件?

我想远离这个:

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

5 回答 5

3

您是在问如何检查它失败的原因吗?

“Winerror.h 中定义的非零错误代码表示失败。要获取错误的一般描述,请调用设置了 FORMAT_MESSAGE_FROM_SYSTEM 标志的 FormatMessage。”

所以.. ERROR_SUCCESS 如果成功,错误代码如果失败。

于 2009-04-04T05:59:26.273 回答
1

您可以使用换行符,或命名事物或两者兼而有之,

 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 ) {
     ...
于 2009-04-05T18:44:18.827 回答
1

检查未编辑的问题后,我认为您唯一能做的就是将语句分解为多个语句,如下所示:

const char* regKey = "BIG_STRING......";
DWORD errorCode = RegOpenKeyEx(...);
if(ERROR_SUCCESS == errorCode)
{ 
  //Rest of the code
}
else
{
  //Error handling
}
于 2009-04-04T06:15:14.410 回答
0

您可以改为使用三元运算符:

bool success = (RegKeyOpenEx(...) == ERROR_SUCCESS);
printf("%s\n", success ? "Success" : "Failure");
于 2009-04-04T07:43:05.367 回答
0

不成功时不返回 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" );
}
于 2009-04-04T05:57:58.973 回答