Проблема со структурами

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

mig29
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 13.04.2004 (Вт) 7:43

Проблема со структурами

Сообщение mig29 » 13.04.2004 (Вт) 7:56

Столкнулся с проблемой заполнения полей структуры при миграции из VB6 в VB.Net..
Например, есть структура:

Public Structure PciNonBridge

Dim VendorId As Short 'первая группа
Dim DeviceId As Short
Dim command_reg As Short
Dim status_reg As Short

Dim revisionID As Byte 'вторая группа
Dim progIF As Byte
Dim subclass As Byte
Dim classcode As Byte

Dim cacheline_size As Byte 'третья группа
Dim latency As Byte
Dim header_type As Byte
Dim BIST As Byte
...
Тут много еще чего (массивов нет).
...
End Structure

При вызове функции из DLL, заполняющей эту структуру, происходит следующее: первая группа заполняется корректно, а информация из
третьей группы попадает во вторую. Из следующих в третью и т.д. Т.е. происходит смещение влево на 4 байта всей структуры, начиная с третьей группы.
Думаю, излишне говорить, что в VB6 это все работает.

Грандж
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 150
Зарегистрирован: 29.10.2002 (Вт) 14:10
Откуда: Москва

Сообщение Грандж » 13.04.2004 (Вт) 15:38

каким образом заполняется структура?
можно ли выполнить пошагово?

вообще странно.. весь код кинуть можешь?
и между ног затеплилась надежда
(%

http://grunger.net.ru

mig29
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 13.04.2004 (Вт) 7:43

Сообщение mig29 » 13.04.2004 (Вт) 16:12

Структура заполняется единой функцией пересылки memset() в Сишной программе внутри DLL. Самое интересное, когда я каждые два байтовых поля заменяю на одно поле типа Short (см ниже) - все работает. Я байты выделяю ручками с помощью сдвига.
Неужели VB net располагает поля внутри структуры столь непредсказуемым образом? Очень странно...

Public Structure PciNonBridge

Dim VendorId As Short 'первая группа
Dim DeviceId As Short
Dim command_reg As Short
Dim status_reg As Short

Dim revisionID As Short 'вторая группа
' Dim progIF As Byte
Dim subclass As Short
' Dim classcode As Byte


Вернуться в Visual Basic .NET

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 56

    TopList