C++ 如何使用C++;
如果用户关闭/重新启动/注销计算机,我希望以编程方式检入我的应用程序。 我试图实现下面的代码,但它给出了编译错误C++ 如何使用C++;,c++,qt,winapi,C++,Qt,Winapi,如果用户关闭/重新启动/注销计算机,我希望以编程方式检入我的应用程序。 我试图实现下面的代码,但它给出了编译错误 error: invalid conversion from 'bool (*)(DWORD)' to 'BOOL (*)(DWORD)' error: initializing argument 1 of 'BOOL SetConsoleCtrlHandler(BOOL (*)(DWORD), BOOL)' void TestApp:: OnQuit() { SetCon
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创建者QT SDK和C++。 < P>正如其他人所说的,<代码>布尔O./COD>是<代码> int >代码>,而不是<代码>布尔O/COD>。
bool
的标称值为true
和false
,1
和0
。BOOL
使用FALSE==0
和TRUE==!错误
。在这里基本上没有关系,因为它们基本上是以相同的方式工作的
BOOL
源于WinAPI的老传统,当时C
没有内置的BOOL
类型
因此,您真正需要做的就是在处理程序中将bool
更改为bool
:
BOOL WINAPI HandlerRoutine(DWORD dwCtrlType)
^^^^
{
BOOL ret = false;
^^^^
if (dwCtrlType == CTRL_LOGOFF_EVENT || dwCtrlType == CTRL_SHUTDOWN_EVENT)
//Graceful Quit
return ret;
}
BOOL
不是BOOL
。这里的forBOOL
是int
的typedef
。这就是为什么使用bool
不起作用的原因。@chris,Kuba Ober--谢谢你的帮助。@Wes,代码编译得很好,但从未进入方法handler例程。我想知道回调实现有什么问题。