C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
-w-8059 Structure packing size has changed
Гость
Отправлено: 03.09.2003, 21:45


Не зарегистрирован







Добрый вечер!
У меня возник вопрос
При переходе с BCB5 на BCB6 в большом проекте начали появляться в большом количестве предупреждения

W 8059 Structure packing size has changed

из-за конфликта между файлами описания:

$(BCB)\include\config\_prolog.h и $(BCB)\include\stl\_prolog_h
$(BCB)\include\config\_epilog.h и $(BCB)\include\stl\_epilog_h

что с этим делать и как бороться

в Conditional defines только STRICT

Георгий
Отправлено: 04.09.2003, 19:28


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



Это значит, что где — то кто-то изменил параметры выравнивания полей структуры и не вернул в исходное значение.
Надо или игнорировать эти предупреждения c помошью
CODE
#pragma nopackwarning
в конце включаемого файла или обрамить код так:
CODE
#pragma pack ( push, <нужное выравнивание>)
<описание структуры>
#pragma pack ( pop )

Скорее всего когда устанавливалось выравнивание полей структуры было забыто pragma pack pop.
Гость
Отправлено: 04.09.2003, 19:54


Не зарегистрирован







Добрый вечер!
Вносить изменения во все файлы описания — это очень трудоёмкая задача.
1) К каким последствиям может привести игнорирование этого предупреждения?
2) Нет ли возможности ввести переменную для Conditional defines, такую, чтобы везде использовался один и тот же файл описания _prolog_h и _epilog_h

Спасибо за ответ!
Георгий
Отправлено: 04.09.2003, 22:37


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



1) выравнивание полей чужих структур (системные или из чужих dll) может быть изменено и, как следствие, функции, работающие с этими структурами, не будут корректно работать — вплоть до access violation.
Но обычно для всех интерфейсных структур выравнивание задаётся явно (pragma pack) что и спасает от выше описанного глюка.

2) не знаю

В любом случае, после переноса проекта, надо провести все тесты и проверить работоспособность каждого модуля (тестовые функции я надеюсь у Вас реализованы?), после успешного прохождения тестов можно смело плюнуть на предупреждения и в проектной документации написать "bcb 6.0 — дурaк т.к. не понимает глубоких мыслей в нашем коде и ругается по пустякам <число> <подпись> <печать>".

а фильтр базара всё таки работает — слово дурaк хотел заменить на д-к, но я ему не дал smile.gif

Отредактировано Георгий — 04/09/2003, 23:46
Гость
Отправлено: 04.09.2003, 23:18


Не зарегистрирован







Спасибо за моральную поддержку и добрый совет!
Будем тестировать и плевать smile.gif

Вернуться в Вопросы программирования в C++Builder