Russian Qt Forum
Ноябрь 25, 2024, 11:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Структура в памяти против QT  (Прочитано 7315 раз)
Zmey
Гость
« : Апрель 06, 2005, 10:06 »

Есть указатель на область в памяти, и в этой памяти лежат: сначала DWORD, потом __int64, потом WORD, потом BYTE. То есть 4 байта, 8, 2 и 1.
Делаю структуру:
   struct stnameAllFiles {
      Q_UINT32 dwFileSize;
      Q_UINT64 qwLastTime;
      Q_UINT16 wNameLenght;
      Q_UINT8 iTypeRecord;
   };
И указатель на нее:
   stnameAllFiles* pstAllFiles;
Присваиваю этому указателю:
pstAllFiles = (stnameAllFiles*)lpv;
lpv - указатель на память, где лежат числа.
Так вот на pstAllFiles->dwFileSize выделяется 8 байт, на qwLastTime - 8 байт, на wNameLenght - 2, на iTypeRecord - 2.
Посоветовали в настройках Visual Studio в Project - Settings... - C/C++ - Category: Code Generation - Struct member alignment поставить 1 Byte (а стояло 8 Byte).
Но теперь в конструкторе функция QComboBox::insertStringList выдает Unhandled exception in MyProg.exe (QT-MT333.DLL): 0xC0000005: Access Violation.
Как это победить?
Qt 3.3.3, Visual Studio 6 SP6, WinXP SP2.
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #1 : Апрель 06, 2005, 12:38 »

есть аналогичная директива

#pragma не помню как дальше

ее можно локально в код вставить


а вообще такое лучше старатся не использовать
Записан
Zmey
Гость
« Ответ #2 : Апрель 06, 2005, 13:33 »

#pragma pack(1) помогло. Спасибо.
Я бы с удовольствием не использовал, если бы без этого работало.
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #3 : Апрель 06, 2005, 15:08 »

когда структуру пишешь например в файл надо всегда
поэлементно упаковывать ее
а не просто
fwrite(&struct,1,sizeof(struct),fl);
Записан
kolob
Частый гость
***
Offline Offline

Сообщений: 296



Просмотр профиля
« Ответ #4 : Июнь 02, 2011, 13:48 »

Такая же ошибка. Что делать? Вываливается когда пытаюсь добавить иконку для меню
Код:
act->setIconSet(QPixmap::fromMimeSource("icon.png"));
Записан

Qt 5.11.0, Win, MinGW
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Июнь 02, 2011, 14:01 »

2 kolob
Когда уже на Qt4 перейдёшь? Сам же знаешь, что здесь знатоков Qt3 практически нет.
Записан

Qt 5.11/4.8.7 (X11/Win)
kolob
Частый гость
***
Offline Offline

Сообщений: 296



Просмотр профиля
« Ответ #6 : Июнь 02, 2011, 14:16 »

Цитировать
Когда уже на Qt4 перейдёшь?
Да вот уже собираюсь на 4.6 переходить с нового проекта. А тут старый поддерживать надо, а он на 3-ке.
Цитировать
Сам же знаешь, что здесь знатоков Qt3 практически нет.
Но некоторые же когда то начинали и с 3-й.
Записан

Qt 5.11.0, Win, MinGW
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #7 : Июнь 08, 2011, 01:17 »

пакуй структуры через #pragma pack(1) или аттрибуты http://sig9.com/articles/gcc-packed-structures
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.044 секунд. Запросов: 22.