регистрация для уведомлений устройства - PullRequest
0 голосов
/ 23 ноября 2018

, поэтому я искал способ получать уведомления, когда USB-устройство подключено к компьютеру.Я нашел этот код здесь: https://docs.microsoft.com/en-us/windows/desktop/devio/registering-for-device-notification
Теперь у меня есть несколько проблем с этим кодом (Visual C ++).Я попытался вставить его в свой Visual C ++ 2017, но он не скомпилируется.Есть 6 ошибок в 2 типах: строки 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 голосов
/ 23 ноября 2018

Ну, во-первых, этот пример кода написан плохо.Это смешение таких вещей, как PWSTR с LPTSTR.PWSTR - указатель на строку широких символов, тогда как LPTSTR - указатель на строку символов или строку широких символов в зависимости от настроек проекта.

Поскольку в коде используется широкоформатная строкастроки в некоторых местах и ​​вызывающие функции, оканчивающиеся на W, вам нужно настроить проект на использование широких символьных строк для всего.У меня нет VS 2017, но в VS 2015 вы настраиваете свой проект для использования строк широких символов, устанавливая Проект-> Свойства-> Общие-> Набор символов на Использовать набор символов 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];

Вы также можете изменить Проект-> Свойства-> Общие-> Набор символов обратно на то, что было изначально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...