因此,我一直在寻找将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添加到项目中。我做到了,但是我仍然遇到这些错误,并且在网上搜索它们并没有帮助,因为我确实理解了该错误,但不知道如何解决。如果您可以帮助我编译此代码,我将不胜感激。预先感谢!
答案 0 :(得分:1)
首先,示例代码编写得不好。它将PWSTR
与LPTSTR
混合在一起。 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 更改回原始设置。