Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > DEV_BROADCAST_DEVICEINTERFACE в WM_DEVICECHANGE


Автор: kami 15.5.2012, 22:04
Доброго времени суток, дамы и господа!
Пытаюсь разобраться с RegisterDeviceNotification, фильтр DBT_DEVTYP_DEVICEINTERFACE.
Работаю из десктопного приложения, т.е. отлавливаю через оконную функцию.
Версия Delphi - 2010, используются W-функции.

Собственно, всё получается, но есть один вопрос:
в описании структуры http://msdn.microsoft.com/en-us/library/windows/desktop/aa363244(v=vs.85).aspx, которая возвращается в WM_DEVICECHANGE, параметр dbcc_name пишут:
при получении этой структуры окном, параметр dbcc_name будет конвертирован в ANSI, а если получать через HandlerEx сервиса, то в unicode.

Однако, мое приложение (оконное!) получает Unicode-строку с именем устройства. Попытка использовать вместо PChar -> PAnsiChar приводят, естественно, к получению только первого символа, а именно - '\'.

Я неправильно перевел MSDN или есть что-то, что я не учитываю?

Большое спасибо всем откликнувшимся.

Автор: bems 15.5.2012, 22:09
Подозреваю что дело в уникодности окна

Автор: kami 15.5.2012, 22:24
Цитата(bems @  15.5.2012,  22:09 Найти цитируемый пост)
Подозреваю что дело в уникодности окна

То есть, 
Цитата
the dbcc_name string is converted to ANSI as appropriate
 следует читать как "будет конвертировано в ANSI в случае необходимости, т.е. если окно не юникодное? (крайне вольный перевод). Больше всего смущает именно as appropriate - из-за него не получается "грамотно понять" фразу.

Автор: bems 15.5.2012, 22:30
Гуглотранслейт не видит во фразе проблемы
http://translate.google.com/#auto|ru|string%20is%20converted%20to%20ANSI%20as%20appropriate

Автор: kami 15.5.2012, 22:42
Меня смущает именно "по мере необходимости". Нет явного объяснения, когда эта необходимость возникает. Ведь в большинстве случаев в MSDN указывают, что есть A-вариант и W-вариант, а если нет - значит "это" существует в одном, неизменном виде...

Добавлено @ 22:49
Ай-я, еще раз перечитал - всё там указано.
Цитата

Services always receive a Unicode string, whether they call RegisterDeviceNotificationW or RegisterDeviceNotificationA.

То есть - дело в том, какую версию RegisterDeviceNotification вызвать.

Еще раз - спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)