Yoksel: ИгрыСБустом ...
SourceForge.net Logo

Home Page | Изменения / НовыеКомментарии / Справка / Помочь проекту | Вход:  Пароль:  

Блог Игры с Бустом


Итак, задача: требуется переписать конвертер в формат mxl. Конвертер активно использует MFC-шный CArchive, поэтому желательно найти ему похожую замену. После некоторых поисков был выбран boost::archive::binary_oarchive. Он, правда, предназначен для сериализации. Например, он позволяет использовать один и тот же код как для загрузки, так и для выгрузки:



В зависимости от типа архива код “ar & m_Member” будет или записывать в архив переменную m_Member или читать ее оттуда. Также можно использовать синтаксис ar << m_Member, что уже совсем близко к CArchive.


Один недостаток: т.к. один и тот же код используется как для загрузки, так и для выгрузки, то нельзя передавать в архив ссылку на константу. Например, так уже не напишешь:



Приходится писать примерно так:


Попробовал сделать тестовый проект. Выяснилось, что на этот раз одними заголовками не обойдешься – нужно собирать Буст. У меня стоял 1.33. Решил заодно перейти на 1.34. Скачал, начинаю собирать. Для сборки запускаю отдельную консоль, в которой запускаю батник vcvars32 из Студии. Его пришлось поправить – он не соответствовал настройкам в Студии. Также нужно в PATH прописать каталог с компилятором Intel. Собираю командой bjam --toolset=intel stage.


При сборке вылезает куча ошибок линковки, связанных с basic_string<wchar_t... В Гугле нахожу, что STLport должен быть собран с опцией /Zc:wchar_t (т.е. wchar_t должен быть встроенным типом, а не синонимом unsigned short). Пересобираю STLport. Естественно, сначала забываю удалить следы предыдущей сборки и поначалу от пересборки результатов нет. Но все кончается благополучно.


Для проверки пересобираю Yoksel. Естественно вылезает куча ошибок линковки из-за Cpp Unit?, собранного со старым вариантом STLport. Требуется пересобрать Cpp Unit?. Т.к. VC6 не поддерживает встроенный wchar_t, сборка делается в VS2005 + IC. Обязательно надо отключить “buffer security check”. Иначе эта опция сразу или потом приведет к ошибке линковки.


Опять пересобираю Yoksel. Все равно вылезает несколько ошибок линковки. Почему-то опция “Treat wchar_t as Built-in type” компилятором не воспринимается. Приходится явно в командной строке писать «/Zc:wchar_t". Теперь порядок.


Пересобираю Буст. Теперь ошибок линковки нет. Собирается.


Делаю тестовый проект для проверки работы boost::archive::binary_oarchive. Выясняю, что Буст собран в двух вариантах: статическая линковка всего или динамическая линковка всего. Мне же нужно STLport линковать статически, а CRT – динамически. Поковыряв немного систему сборки делаю достаточно кривое исправление в файле intel-win.jam, которое приводит, однако, к нужному результату:


Пересобираю модуль сериализации (один модуль можно пересобрать, если использовать ключ --with-libname. Например, --with-date_time). Пересобираю тестовый проект – все нормально. Правда почти ничего не делающий exe весит 400К, однако не содержит никаких лишних зависимостей. В исходном варианте появлялись зависимости от stlport.5.1.dll и libmmd.dll


Пробую пересобрать Yoksel с прописанными заголовками от Буста 1.34. Почти все нормально проходит нормально. Однако ломается следующий код:

Этот код – практически, один в один код из примера по string_algo... Вылезают ошибки в boost::function. Подмена заголовков string_algo на старые проблему не решает. Возвращаю их назад и пробую подменить заголовки function. Теперь нормально. «Но вкус у победы какой-то странный».


 
Файлов нет. [Показать файлы/форму]
Комментариев нет. [Показать комментарии/форму]