在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
相关产品推荐
相关产品推荐

