0

ユーザーがコンピューターをシャットダウン/再起動/ログオフするかどうかをプログラムでアプリケーションにチェックインしたい。以下のコードを実装しようとすると、コンパイルエラーが発生します

error: invalid conversion from 'bool (*)(DWORD)' to 'BOOL (*)(DWORD)'
error: initializing argument 1 of 'BOOL SetConsoleCtrlHandler(BOOL (*)(DWORD), BOOL)'

void TestApp:: OnQuit()
{
    SetConsoleCtrlHandler(HandlerRoutine, TRUE);
}

//Windows Call Back function implementation
bool WINAPI HandlerRoutine(DWORD dwCtrlType)
{
   bool ret = false;    
   if (dwCtrlType == CTRL_LOGOFF_EVENT || dwCtrlType == CTRL_SHUTDOWN_EVENT)
      //Graceful Quit

   return ret;
}

私の開発環境はQTCreatorQTSDKとC++です。

4

1 に答える 1

1

他の人が言っているように、aBOOLはでありint、ではありませんbool。Aの公称bool値は、、、およびtrueです。用途と。_ それらは本質的に同じように機能するので、ここではほとんど関係ありません。false10BOOLFALSE == 0TRUE == !FALSE

これは、組み込みの型がなかっBOOLたときのWinAPIの古い遺産に由来します。Cbool

したがって、実際に行う必要があるのは、ハンドラーでに変更boolすることだけです。BOOL

BOOL WINAPI HandlerRoutine(DWORD dwCtrlType)
^^^^
{
   BOOL ret = false;    
   ^^^^
   if (dwCtrlType == CTRL_LOGOFF_EVENT || dwCtrlType == CTRL_SHUTDOWN_EVENT)
      //Graceful Quit

   return ret;
}
于 2012-06-25T18:20:44.937 に答える