visual-c++ - 注册设备通知
问题描述
所以我一直在寻找一种在 USB 设备连接到电脑时获取通知的方法。我在这里找到了这段代码:https
://docs.microsoft.com/en-us/windows/desktop/devio/registering-for-device-notification
现在我对这段代码有一些问题(visual c++)。我尝试将它放在我的 Visual c++ 2017 中,但它不会编译。有 2 种类型的 6 个错误:第 330、344、495 行:错误 E0167。'“PTSTR”类型的参数与“LPCWSTR”类型的参数不兼容'
https://www.bing.com/search?q=C%2B%2B%20argument+of+type+%22PTSTR%22+is+incompatible +with+parameter+of+type+%22LPCWSTR%22第 330、350、495
行:错误 C2664。“'LPWSTR *CommandLineToArgvW(LPCWSTR,int *)': 无法将参数 1/3 从 'PTSTR' 转换为 'LPCWSTR'”
https://docs.microsoft.com/en-us/cpp/error-messages/compiler-errors-2/compiler-error-c2664?f1url=https%3A%2F%2Fmsdn.microsoft.com%2Fquery%2Fdev15。查询%3FappId%3DDev15IDEF1%26l%3DEN-US%26k%3Dk(C2664)%26rd%3Dtrue&view=vs-2017
在第 330 行之前,有一条评论说要将 Windows 添加到项目中。我这样做了,但我仍然收到这些错误,并且在网络上搜索它们并没有帮助,因为我确实了解错误但不知道如何修复它。如果您能帮我编译这段代码,我将不胜感激。提前致谢!
解决方案
好吧,首先,示例代码写得不好。它正在混合诸如PWSTR
with之类的东西LPTSTR
。PWSTR
是指向宽字符串LPTSTR
的指针,而 是指向字符串或宽字符串的指针,具体取决于项目设置。
由于代码在某些地方使用了宽字符串并调用了以 结尾的函数W
,因此您需要将项目配置为对所有内容都使用宽字符串。我没有 VS 2017,但在 VS 2015 中,您可以通过将Project->Properties->General->Character Set 设置为Use Unicode Character Set来配置项目以使用宽字符串。
编辑:回答您的评论。
您遇到的问题主要是由于第 13 行:
PWSTR g_pszAppName;
这是显式声明为宽字符串指针的两个变量之一。您可以尝试修改代码以不使用任何宽字符串,如下所示:
将第 13 行更改为:
PTSTR g_pszAppName = _T("MyApp"); // Put your app name here
删除这两行(330 和 331):
PWSTR* ppArgV = CommandLineToArgvW(lpstrCmdLine, &nArgC);
g_pszAppName = ppArgV[0];
您可能还想将Project->Properties->General->Character Set改回原来的样子。
推荐阅读
- android - 应用在 Backtound Android 8 中时的位置更新
- python - 为什么这个简单的代码返回“无”?
- javascript - 如何使用 google-api-javascript-client 使用 Javascript 访问 Google Photos API 并读取 JSON 数据?
- oracle - 如何在 Stackdriver 中监控安装在 GCE 实例中的 Oracle 数据库?
- cuda - CUDA<<<...>>>() 内核启动语法是如何实现的
- ruby - Elasticsearch 嵌套查询返回所有嵌套列表
- php - 文件上传进度条
- ios - 授权回调地址 GitHub
- android - 计算线性布局的空白区域
- python - 连接两个 NumPy 数组给出“ValueError:所有输入数组必须具有相同的维数”