注册设备通知

时间:2018-11-23 18:54:04

标签: visual-c++

因此,我一直在寻找将USB设备连接到PC时获得通知的方法。我在这里找到此代码: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.query%3FappId%3DDev15IDEF1%26l%3DEN-US%26k%3Dk(C2664)%26rd%3Dtrue&view=vs-2017

在第330行之前,有一条注释,指出要将Windows添加到项目中。我做到了,但是我仍然遇到这些错误,并且在网上搜索它们并没有帮助,因为我确实理解了该错误,但不知道如何解决。如果您可以帮助我编译此代码,我将不胜感激。预先感谢!

1 个答案:

答案 0 :(得分:1)

首先,示例代码编写得不好。它将PWSTRLPTSTR混合在一起。 PWSTR是指向宽字符字符串的指针,而LPTSTR是指向字符串或宽字符字符串的指针,具体取决于项目设置。

由于代码在某些地方使用宽字符字符串并调用以W结尾的函数,因此您需要将项目配置为对所有内容都使用宽字符字符串。我没有VS 2017,但是在VS 2015中,您可以通过将 Project-> Properties-> General-> Character Set 设置为使用Unicode字符集,将项目配置为使用宽字符字符串

编辑:回答您的评论。

您遇到的问题主要归因于第13行:

PWSTR g_pszAppName;

这是显式声明为宽字符字符串指针的两个变量之一。您可以尝试将代码修改为不使用任何宽字符串,如下所示:

将第13行更改为:

PTSTR g_pszAppName = _T("MyApp");   // Put your app name here

删除这2行(330和331):

PWSTR* ppArgV = CommandLineToArgvW(lpstrCmdLine, &nArgC);
g_pszAppName = ppArgV[0];

您可能还想将 Project-> Properties-> General-> Character Set 更改回原始设置。