You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在VS 2022 DLL项目中调用Win32 DeviceWatcher API的方法

在VS2022 DLL项目里调用DeviceWatcher API的完整配置指南

1. 先明确:DeviceWatcher是WinRT API,不是传统Win32 API

DeviceWatcher属于Windows Runtime(WinRT)范畴,并非普通Win32 API,所以你的DLL项目需要启用C++/WinRT支持才能调用它,具体步骤如下:

2. 开启项目的C++/WinRT支持

右键你的DLL项目 → 选择「属性」:

  • 转到「常规」选项卡,将「Windows SDK版本」设置为Windows 10 17134(1803)或更高版本
  • 找到「C++/WinRT」选项,把「启用C++/WinRT」设为「是」

3. 添加头文件与命名空间

在你要使用DeviceWatcher的代码文件(.cpp或.h)开头,添加以下代码:

#include <winrt/Windows.Devices.Enumeration.h>
#include <winrt/Windows.Foundation.h>

using namespace winrt::Windows::Devices::Enumeration;
using namespace winrt::Windows::Foundation;

注意:C++/WinRT里必须加winrt::前缀,避免和其他命名空间冲突,这和你最初写的代码略有差异。

4. 配置链接库(无需额外Win32 API引用)

不需要单独添加Win32 API引用,只要确保项目链接了必要的系统库:

  • 打开项目属性 → 「链接器」→「输入」→「附加依赖项」,如果里面没有windowsapp.lib,手动添加进去。一般启用C++/WinRT后会自动添加,保险起见可以检查一下。

5. 简单使用示例

在你的DLL函数里可以这样写测试代码:

void StartDeviceMonitoring()
{
    // 创建设备监听器
    DeviceWatcher watcher = DeviceInformation::CreateWatcher();

    // 注册设备新增事件回调
    watcher.Added([](const DeviceInformation& deviceInfo) {
        // 处理新增设备,比如获取设备ID
        hstring deviceId = deviceInfo.Id();
        // 这里可以添加你的业务逻辑
    });

    // 启动监听
    watcher.Start();
}

额外注意

  • 只有C项目能使用C/WinRT,如果你的DLL是MFC或ATL类型,需要额外调整项目设置来兼容WinRT
  • 要注意DeviceWatcher的生命周期,不用的时候记得调用Stop(),避免内存泄漏

内容的提问来源于stack exchange,提问作者Nikolay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 13:54:36