windowsapi中的C注册表函数
RegOpenKeyEx() 我想要printf(“成功”)或printf(“失败”),这取决于函数是失败还是成功 我如何在保持整洁易读的同时做这样一个有条件的工作 我想远离这一点: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。这就是你的意思吗 要多次检查错误代码,请使用
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万次,否则溢出的可能性很小。你的担心是没有根据的,也是没有教育的。