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 に答える