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;
}

我的开发环境是 QT Creator QT SDK 和 C++。

4

1 回答 1

1

正如其他人所说, aBOOL是 a int,而不是 a bool。Abool的标称值为truefalse1并且0。ABOOL使用FALSE == 0TRUE == !FALSE。在这里几乎没有关系,因为它们基本上以相同的方式工作。

BOOL来自C没有内置bool类型的 WinAPI的旧遗产。

所以,你真正需要做的就是改变boolBOOL的处理程序:

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 回答