gpt4 book ai didi

c++ - 如 MSDN 所述,提供 SERVICE_STATUS_HANDLE (long unsigned int),函数需要 HANDLE (void*)

转载 作者:行者123 更新时间:2023-11-28 04:51:25 27 4
gpt4 key购买 nike

我正在尝试创建一个检测 USB 插入的服务。为此,我必须通过 RegisterDeviceNotification(HANDLE, LPVOID, DWORD)< 创建一个 HDEVNOTIFY/.

根据 MSDN , 关于第一个参数:

A handle to the window or service that will receive device events for the devices specified in the NotificationFilter parameter. The same window handle can be used in multiple calls to RegisterDeviceNotification.

Services can specify either a window handle or service status handle.

所以我这样做了(svcStatHandle 是一个SERVICE_STATUS_HANDLE):

hDeviceNotify = RegisterDeviceNotification( svcStatHandle,          
&NotificationFilter,
DEVICE_NOTIFY_SERVICE_HANDLE);

但是g++在编译的时候报错如下:

error: invalid conversion from 'SERVICE_STATUS_HANDLE {aka long unsigned int}' to 'HANDLE {aka void*}' [-fpermissive]

基于此,我得出结论,我尝试通过代码提供一个 long unsigned int(一个值),其中需要一个 void*(一个指针)。

几个令人沮丧的小时后,在错误首次出现后,我通过将 -fpermissive 添加到编译器命令行标志(它变成警告)成功地让它工作,但是 我想知道到底出了什么问题。在需要指针的地方提供一个值听起来不对,我想让我的代码远离警告。

最佳答案

我的 winsvc.h 头文件被发现有一个不正确的定义,如 original MinGW project 所示(由 eryksun 指出),因此根据 wikipedia,它可能是一个过时的版本, MinGW-w64已构建以支持 64 位和新的 API。最重要的是,它包含 SERVICE_STATUS_HANDLE 的正确定义。这很有意义,因为我从那个过时的来源获得了我的 MinGW。

这意味着从长远来看,用 MinGW-w64 替换是最好的方法,但是直接编辑 winsvc.h 也可以,尽管可能会产生副作用

关于c++ - 如 MSDN 所述,提供 SERVICE_STATUS_HANDLE (long unsigned int),函数需要 HANDLE (void*),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48137909/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com