首页 > 解决方案 > 注册设备通知

问题描述

所以我一直在寻找一种在 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 添加到项目中。我这样做了,但我仍然收到这些错误,并且在网络上搜索它们并没有帮助,因为我确实了解错误但不知道如何修复它。如果您能帮我编译这段代码,我将不胜感激。提前致谢!

标签: visual-c++

解决方案


好吧,首先,示例代码写得不好。它正在混合诸如PWSTRwith之类的东西LPTSTRPWSTR是指向宽字符串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改回原来的样子。


推荐阅读