Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: WinAPI и системное программирование > DeviceIOControl |
Автор: Artem148 20.6.2011, 18:35 |
Здрасте! Функция DeviceIOControl с параметром IOCTL_STORAGE_QUERY_PROPERTY возврашает: 1) VendorIdOffset 2) ProductIdOffset 3) ProductRevisionOffset 4) SerialNumberOffset Всё в DWORD`e Вопрос: Как получить(конвертировать) это в String? Заранее спасибо! |
Автор: Dik0n 20.6.2011, 22:30 |
IntToStr(); - даже как то странно, этого не знать ![]() |
Автор: kami 20.6.2011, 23:56 | ||
В данном случае - неверно. Потому что указанные параметры - это смещения относительно начала выходного буфера. По этому смещению начинается ASCII строка с завершающим 0, т.е. PAnsiChar. Добраться до нее можно как-то так (общий принцип):
Добавлено @ 23:59 Ну и, само собой - VendorIDOffset и т.п. для правильного получения строки не должно быть =0, о чем прямо сказано в http://msdn.microsoft.com/en-us/library/ff800835(v=vs.85).aspx |
Автор: Dik0n 21.6.2011, 00:17 | ||
Я подумал что надо просто DWORD в строку конвертировать ![]()
|
Автор: kami 21.6.2011, 08:33 |
И будете всегда получать ERROR_INSUFFICIENT_BUFFER. Потому что RawDeviceProperties - это всего лишь указатель на первый байт области памяти, в которой хранятся те самые PAnsiVendorID и т.д. В Вашем же примере размер выходного буфера постоянен. И никакие данные в 1 байт не влезут. |
Автор: Artem148 21.6.2011, 13:36 |
[DCC Error] E2089 Invalid typecast |
Автор: kami 21.6.2011, 15:26 |
http://lurkmore.ru/%D2%E5%EB%E5%EF%E0%F2%FB_%E2_%EE%F2%EF%F3%F1%EA%E5. Что Invalid typecast ? |
Автор: Artem148 22.6.2011, 20:32 | ||||
а жаль.... |
Автор: kami 22.6.2011, 22:08 |
А Вы обратили внимание, какого типа буфер у меня в примере (приставка P о чем-нибудь говорит?): и у Вас: Все равно - наступите на те же грабли, что и в коде Dik0n. Добавлено @ 22:19 Совет: Найдите поиском в интернете код, который выкладывала Riply. Afair, дело было на DelphiMaster. |
Автор: Dik0n 23.6.2011, 08:30 |
http://forum.sources.ru/index.php?showtopic=210411 оно не ? |
Автор: Artem148 23.6.2011, 11:26 | ||
http://ru.wikipedia.org/wiki/Офтальмология тоже в отпуске... Да, всё равно в Type где-то вру... ![]() Если вас не затруднит, можете скинуть пример... |
Автор: Artem148 24.6.2011, 21:55 |
Вопрос снят! kami, всё дело оказалась прозаичнее: во всём виновата десятая еврейская делфи(всё ей не так! ![]() запустил в 2007 - работает и мой код и ваш(после небольшой доработки ![]() Всем спасибо за помощь и утраченное время ![]() P.S Delphi XE капризничает уже так не первый раз ... ![]() |
Автор: kami 24.6.2011, 23:04 |
Думается, Delphi здесь ни при чем ![]() Отличие версии 2007 от 2010 в большинстве случаев "виноватости" состоит только в одном: в 2007 string = AnsiString в 2010 string = UnicodeString. Со всеми вытекающими. |
Автор: Artem148 25.6.2011, 19:29 |
P.S Всё равно получаю в Delphi XE китайские символы... Всё обгуглил; функции конвектирования нет... Ну что ж, пойду учить китайский... ![]() |