Как мне декодировать PDEV_BROADCAST_DEVICEINTERFACE :: dbcc_name? - PullRequest
1 голос
/ 06 июля 2010

Я пытался наблюдать подсистему USB, чтобы определить, когда устройства добавляются или удаляются, но у меня возникают проблемы с декодированием поля PDEV_BROADCAST_DEVICEINTERFACE::dbcc_name. Мой код основан на пример над codeproject .

Если я щелкну правой кнопкой мыши в своем приложении C ++ / CLI в Visual Studio и перейду к объявлению в Dbt.h, я получу:

typedef struct _DEV_BROADCAST_DEVICEINTERFACE_W {
    DWORD       dbcc_size;
    DWORD       dbcc_devicetype;
    DWORD       dbcc_reserved;
    GUID        dbcc_classguid;
    wchar_t     dbcc_name[1];
} DEV_BROADCAST_DEVICEINTERFACE_W, *PDEV_BROADCAST_DEVICEINTERFACE_W;

Что говорит о том, что имя должно быть wchar_t. Передача этого в новую System :: String просто дает случайные символы. Есть ли что-то еще для преобразования строки wchar_t?

[edit] По сути, я хочу сделать this в C ++ - cli, но как мне это перенести?

1 Ответ

1 голос
/ 06 июля 2010

Понятия не имею, что может означать «кормление». Используйте Marshal :: PtrToStringUni () для преобразования строки. Если окно, которое получает это сообщение, было создано с помощью CreateWindowExA (), то вам нужен Marshal :: PtrToStringAnsi ().

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