如果用户关闭/重启/注销计算机,我想以编程方式检查我的应用程序。 我试图实现下面的代码,它给出了编译错误
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 ++。
答案 0 :(得分:1)
正如其他人所说,BOOL
是int
,而不是bool
。 bool
的名义值为true
和false
,1
和0
。 BOOL
使用FALSE == 0
和TRUE == !FALSE
。大多数情况下,无论如何,因为它们基本上以相同的方式工作。
当BOOL
没有内置C
类型时,bool
来自WinAPI的旧遗产。
因此,您真正需要做的就是在处理程序中将bool
更改为BOOL
:
BOOL WINAPI HandlerRoutine(DWORD dwCtrlType)
^^^^
{
BOOL ret = false;
^^^^
if (dwCtrlType == CTRL_LOGOFF_EVENT || dwCtrlType == CTRL_SHUTDOWN_EVENT)
//Graceful Quit
return ret;
}