Библиотека knigago >> Компьютеры: Языки и системы программирования >> C, C++, C# >> Программирование на Visual C++. Архив рассылки


СЛУЧАЙНЫЙ КОММЕНТАРИЙ

# 1009, книга: Три Змеи
автор: Олег Яцула

Попаданцы Попав в далекий мир Кse, бывший военный Алексей становится свидетелем междоусобиц между тремя змеиными кланами. Стремясь помочь слабейшим и отыскать своего пропавшего сына, он погружается в эпицентр противостояния могущественных существ. Алексей - главный герой, умелый воин и заботливый отец. Росс - сын Алексея, мужественный и отважный юноша. Назри - мудрый и справедливый вождь змеиного клана. Тари - коварный и жадный предводитель соперничающего клана. * Автор создал...

Алекс Jenter - Программирование на Visual C++. Архив рассылки

Программирование на Visual C++. Архив рассылки
Книга - Программирование на Visual C++. Архив рассылки.  Алекс Jenter  - прочитать полностью в библиотеке КнигаГо
Название:
Программирование на Visual C++. Архив рассылки
Алекс Jenter

Жанр:

Самиздат, сетевая литература, Литература ХXI века (эпоха Глобализации экономики), Программирование: прочее, C, C++, C#

Изадано в серии:

неизвестно

Издательство:

неизвестно

Год издания:

-

ISBN:

неизвестно

Отзывы:

Комментировать

Рейтинг:

Поделись книгой с друзьями!

Помощь сайту: донат на оплату сервера

Краткое содержание книги "Программирование на Visual C++. Архив рассылки"

РАССЫЛКА ЯВЛЯЕТСЯ ЧАСТЬЮ ПРОЕКТА RSDN, НА САЙТЕ КОТОРОГО ВСЕГДА МОЖНО НАЙТИ ВСЮ НЕОБХОДИМУЮ РАЗРАБОТЧИКУ ИНФОРМАЦИЮ, СТАТЬИ, ФОРУМЫ, РЕСУРСЫ, ПОЛНЫЙ АРХИВ ПРЕДЫДУЩИХ ВЫПУСКОВ РАССЫЛКИ И МНОГОЕ ДРУГОЕ.

Читаем онлайн "Программирование на Visual C++. Архив рассылки". [Страница - 3]

чтобы воспользоваться этой возможностью, в классе-наследнике нужно перекрыть виртуальную функцию Serialize().

Из нее обязательно нужно сначала вызвать родительскую версию. Одна и та же функция используется как для сохранения, так и для восстановления объекта. Какую операцию нужно произвести, она определяет  из своего единственного параметра ar типа CArchive. Вот пример:

void CMyObject::Serialize(CArchive ar) {

 CObject::Serialize(ar); // вызываем версию базового класса

 if (ar.IsStoring()) // если сохраняем,

 {

  ar << something; // то сохранить что-то

 } else // а иначе

 {

  ar >> something; // восстановить

 }

}

Заметьте, что DECLARE_SERIAL|IMPLEMENT_SERIAL помимо сериализации включают и те возможности, которые дают две первые пары — это естественно, ведь если вы восстанавливаете объект, то вам понадобится возможность создать его во время выполнения программы. Например, приложению нужно сохранять и восстанавливать некоторый набор объектов различного типа. А для вызова соответствующего  конструктора при восстановлении  объекта нужно знать его тип. Механизм сериализации сохраняет информацию об объекте вместе с теми  данными, что вы записываете явно в функции Serialize().

ВОПРОС – ОТВЕТ
Следующий вопрос поступил от одного из подписчиков:

Q При программировании элементов ActiveX, в этой технологии есть возможность структурного хранения данных на диске, т.е. создание в файле так называемых хранилищ и потоков (использование интерфейсов IStream и IStorage), проще говоря – представление файла данных в виде иерархической системы внутренних каталогов и файлов, которые там (в данном файле данных) имеют свои строковые имена. Есть ли в MFC возможность структурного хранения, скажем, используя объект класса CArchive в переопределяемой функции Serialize(CArchive) класса, производного от CDocument, ну и так далее? Конечно, этого можно добиться, создав свои собственные наработки (а как хороша эта идея, я имею в виду использование потоков и хранилищ), но все таки хочется знать, есть ли такие возможности в MFC, чтобы не тратить зря время.

Броник (krivoruchko@nvrsk.ru)
A Насколько мне известно, поддержки такой иерархической системы в MFC нет. Во всяком случае, я ее не обнаружил. CArchive и Serialize для этой цели явно не предназначены: в них важную роль играет последовательность записи, т.е. в каком порядке вы что-то записали, в таком нужно это и прочитать. Так что, скорее всего, придется писать свой класс для этой цели. Конечно, это не слишком обнадеживает, но зато этот класс можно будет использовать во всех дальнейших программах, где потребуется такая форма хранения данных. Или – как вариант – можно сделать просто класс-обертку для интерфейсов IStorage и IStream. Конечно, в этом случае придется подключать библиотеку COM (которую в MFC-приложениях, в принципе, никто не запрещает использовать). Впрочем, если кто знает что-нибудь о существовании такого механизма в MFC – пожалуйста, поделитесь с нами.


Всего наилучшего и чтоб программы ваши не знали ошибок.

(C) Алекс Jenter mailto:jenter@mail.ru
Красноярск, 2000.

Программирование на Visual C++ Выпуск №3 от 23/06/2000

Здравствуйте!

Да, это должно было произойти и это произошло! Рассылка получила официальный статус "обычной некоммерческой рассылки" (причем гораздо быстрее, чем я ожидал), с чем я себя и всех вас и поздравляю! 

Хочу извиниться перед подписчиками HTML-версии: во втором выпуске случилось некоторое искажение исходного кода (я упустил из виду, что при автоматической генерации HTML сервер Гор. Кота звездочки (*) интерпретирует как указание сделать шрифт жирным), в результате чего были потеряны указатели. Вот как этот код должен был выглядеть на самом деле:

CRunTimeClass *pClass = RUNTIME_CLASS(СMyObject);

 // получаем ук-ль на структуру CRunTimeClass

CObject *pNewObject = pClass->CreateObject();

 // создаем новый объект нужного класса

ASSERT(pNewObject->IsKindOf(RUNTIME_CLASS(CMyObject));

 // проверяем класс объекта

Меня удивило, что большинство из вас  подписывается именно на HTML – я думал, наши люди как никакие другие считают каждый килобайт. Но, видимо, времена меняются – в лучшую сторону. Дай бог! Так что по вышеописанным причинам я решил поднапрячься и сработать собственный HTML-вариант. То, что получилось, сейчас перед вами, уважаемые HTML-подписчики. Тех, кто выписывает текстовый вариант, уговаривать подписаться на HTML я не буду, потому что прекрасно их понимаю ;) --">

Оставить комментарий:


Ваш e-mail является приватным и не будет опубликован в комментарии.