windowsapi中的C注册表函数

windowsapi中的C注册表函数,c,winapi,readability,C,Winapi,Readability,RegOpenKeyEx() 我想要printf(“成功”)或printf(“失败”),这取决于函数是失败还是成功 我如何在保持整洁易读的同时做这样一个有条件的工作 我想远离这一点: if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,"HUGE LONG KYEY STRUCTURE HERE",0,KEY_SET_VALUE) != 0 ) { //CODE } 当它不成功时,它不会返回ERROR\u SUCCESS。这就是你的意思吗 要多次检查错误代码,请使用

RegOpenKeyEx()

我想要printf(“成功”)或printf(“失败”),这取决于函数是失败还是成功

我如何在保持整洁易读的同时做这样一个有条件的工作

我想远离这一点:

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

当它不成功时,它不会返回ERROR\u 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" );
}

当它不成功时,它不会返回ERROR\u 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" );
}

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

Winerror.h中定义的非零错误代码表示失败。若要获取错误的一般描述,请使用设置的格式\u MESSAGE\u FROM\u系统标志调用FormatMessage


所以。。错误\u如果成功,则为成功;如果失败,则为错误代码。

您是否询问如何检查失败原因

Winerror.h中定义的非零错误代码表示失败。若要获取错误的一般描述,请使用设置的格式\u MESSAGE\u FROM\u系统标志调用FormatMessage


所以。。错误\u成功如果成功,错误代码如果失败。

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

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

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

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

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

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

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

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

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

 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 ) {
     ...

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

 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 ) {
     ...

我想他只是想让它可读。我想他只是想让它可读。这会返回错误代码,而不是布尔值,所以你应该注意整数溢出和正/负返回值。即使返回BOOL的Win32 API函数在不同的情况下也可以返回1或-1(例如GetMessage)。@bk1e-但查看winerror.h会发现没有负面错误代码,除非调用次数超过100万次,否则溢出的可能性很小。您的担心是没有根据的,没有经过教育的。这会返回错误代码,而不是布尔值,因此您应该注意整数溢出和正/负返回值。即使返回BOOL的Win32 API函数在不同的情况下也可以返回1或-1(例如GetMessage)。@bk1e-但查看winerror.h会发现没有负面错误代码,除非调用次数超过100万次,否则溢出的可能性很小。你的担心是没有根据的,也是没有教育的。