Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用C++;_C++_Qt_Winapi - Fatal编程技术网

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
。这里的for
BOOL
int
typedef
。这就是为什么使用
bool
不起作用的原因。@chris,Kuba Ober--谢谢你的帮助。@Wes,代码编译得很好,但从未进入方法handler例程。我想知道回调实现有什么问题。