Гость |
Отправлено: 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к хотел заменить на д-к, но я ему не дал
Отредактировано Георгий — 04/09/2003, 23:46 |
|
Гость |
Отправлено: 04.09.2003, 23:18 |
|
Не зарегистрирован
|
Спасибо за моральную поддержку и добрый совет!
Будем тестировать и плевать |
|