IOCTL_DISK_GET_DRIVE_LAYOUT_EX возможно ли на vb6 ?!

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 10.03.2012 (Сб) 13:29

Тут где-то была тема про выравнивение полей в Си++. Очень на это похоже.
По поводу True - в VB True равно -1, в том, что ты получаешь должно быть просто не 0, но, скорее всего, ровно +1. Значение должно лежать в 0-м байте.

sosed213
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 206
Зарегистрирован: 13.11.2007 (Вт) 21:19
Откуда: Омск

Re: IOCTL_DISK_GET_DRIVE_LAYOUT_EX возможно ли на vb6 ?!

Сообщение sosed213 » 10.03.2012 (Сб) 15:17

Видимо "выравнивание структур" это как раз то что мне нужно, уже нашел достаточно много описания, но пока так и не въехал, наверно осознание придет со временем.
http://forum.sources.ru/index.php?showtopic=110906
http://support.microsoft.com/default.aspx?scid=kb;EN-US;171583
Не могу сказать что знаю все, но и за дурака прошу меня не считать.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 10.03.2012 (Сб) 16:17


sosed213
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 206
Зарегистрирован: 13.11.2007 (Вт) 21:19
Откуда: Омск

Re: IOCTL_DISK_GET_DRIVE_LAYOUT_EX возможно ли на vb6 ?!

Сообщение sosed213 » 11.03.2012 (Вс) 5:17

Почитал. Не до конца разобрался с выравниванием.
Я так понял размер каждой переменной должен быть кратным 1,2,4,8 или 16 ? Так?

И выравнивание применимо только к структурам при вызове API функций?

Если можно "на пальцах" показать на примере этой структуры?

Код: Выделить всё
typedef struct _PARTITION_INFORMATION_GPT {
  GUID    PartitionType;
  GUID    PartitionId;     
  DWORD64 Attributes;
  WCHAR   Name[36];
} PARTITION_INFORMATION_GPT, *PPARTITION_INFORMATION_GPT;



Я делаю так:

Код: Выделить всё
Private Type GUID
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(7) As Byte
End Type

Private Type LARGE_INTEGER
    lowpart As Long
    highpart As Long
End Type

Private Type PARTITION_INFORMATION_GPT
    PartitionType        As GUID   '8 байт
    PartitionId            As GUID   '8 байт
    Attributes            As LARGE_INTEGER    '8 байт
    mName(71)          As Byte   '72 байта
End Type


И как тут выравнивание структур делается? За счет выбранных типов?
Не могу сказать что знаю все, но и за дурака прошу меня не считать.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: IOCTL_DISK_GET_DRIVE_LAYOUT_EX возможно ли на vb6 ?!

Сообщение Хакер » 11.03.2012 (Вс) 8:03

sosed213 писал(а):Я так понял размер каждой переменной должен быть кратным 1,2,4,8 или 16 ? Так?

Слово «должен» — очень такое мутное. Потому что кто кому что должен все договариваются друг с другом в индивидуальном порядке.

sosed213 писал(а):Я делаю так:

В данном случае всё правильно, за исключением того, что глупо делать mName(71) as byte вместо mName(35) As Integer.

sosed213 писал(а):И как тут выравнивание структур делается? За счет выбранных типов?

Здесь нет никакого выравнивание.

Когда будет UDT, в котором будет сначала Byte, а потом Long, вот тут же Long будет выравнен по 4-байтной границе без твоего спроса.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Пред.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 48

    TopList