Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.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++ - Fatal编程技术网

C++ 传递类成员的函数指针

C++ 传递类成员的函数指针,c++,C++,如何获得兼容的指针?您需要使您的serviceCtlHandler函数静态,这意味着它将无法访问任何对象成员。这是因为,RegisterServiceCtrlHandler需要一个未绑定到对象的函数指针,并且不会收到隐含的此指针 如果改为使用RegisterServiceCtrlHandlerEx,则可以传递指向该对象的指针,并让静态函数在正确转换指针后调用另一个成员函数。创建一个自由函数或静态函数,并传递指向该对象的指针。 Service::serviceCtlHandler(DWORD Op

如何获得兼容的指针?

您需要使您的
serviceCtlHandler
函数
静态
,这意味着它将无法访问任何对象成员。这是因为,
RegisterServiceCtrlHandler
需要一个未绑定到对象的函数指针,并且不会收到隐含的
指针


如果改为使用RegisterServiceCtrlHandlerEx,则可以传递指向该对象的指针,并让静态函数在正确转换指针后调用另一个成员函数。

创建一个自由函数或静态函数,并传递指向该对象的指针。
Service::serviceCtlHandler(DWORD OpCode)
{
  //...
}

Service::ServiceStart
{
  //...
  serviceStatusHandle = RegisterServiceCtrlHandler("Service", &Service::serviceCtrlHandler /*incompatible*/); 
  //...
}