Форум программистов CodeGuru
20 Октябрь 2018, 07:56:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Помощь Войти Регистрация  
Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: VC++ 6  (Прочитано 24673 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Mr X
Пользователь
***
Офлайн Офлайн

Сообщений: 32


Просмотр профиля
« Ответ #15 : 08 Декабрь 2006, 20:51:29 »

Код:
void Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
char sign;
prepear_for_save();
for (int i=0; i!=MAX_FILE_SIZE; ++i)
{
sign=sign_in_file[i];
if (sign=='%') {ar << '%'; break;}
ar << sign;
}

}
else
{
;
}
}


Самые различные данные записываются в массив символов, затем в файл ('%' - "служит " символом конца файла). Все работает правильно. При загрузке должны производиться обратные действия, те данные должны быть в символьном массиве sign_in_file. Только я не знаю как это сделать.
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #16 : 08 Декабрь 2006, 23:46:12 »

Цитировать
Самые различные данные записываются в массив символов

Но они строковые - эти данные ?
Цитировать
'%' - "служит " символом конца файла

Гм... а зачем нужет признак конца файла ? Конец файла можно и без признака отловить.
И еще по символу писать - весьма медленно и не практично, имхо. У CArchive есть методы Read/Write - для чтения/записи блока данных, есть ReadString/WriteString для чтения/записи строки.
Но вообще, здесь же сериализация используется. Вот и надо использовать ее возможности.
Принцип такой, что документ должен себя сохранять. Документ может содержать данные в виде иерархии объектов. Объекты могут наследоваться от CObject и иметь метод Serialize. Каждый объект будет просто сохранять свои дочерние, и.т.д.

Но в простейшем случае (в данном примере) можно поступить так:
Код:
if(ar.IsStoring())
{

ar << (UINT) MAX_FILE_SIZE;
ar.Write(sign_in_file, MAX_FILE_SIZE);

}
else
{
UINT nBytes = 0;

ar >> nBytes;
ar.Read(sign_in_file, nBytes);
}

То есть пишем сначала длину данных, потом - сами данные.
При чтении - сначала длину читаем, потом читаем столько данных, сколько надо.
Конечно тут без проверок на ошибки (может быть файл фапорчен, например и длина больше/меньше чем надо считается), и.т.д.
Записан

Mr X
Пользователь
***
Офлайн Офлайн

Сообщений: 32


Просмотр профиля
« Ответ #17 : 29 Декабрь 2006, 19:14:49 »

У меня вопрос по статическим членам класса

Код:
class my_class{
public:
static CBitmap bitmap;
};


Код:
CBitmap my_class::bitmap;
my_class::bitmap.LoadBitmap(IDB_BITMAP1);


На последней строке - ошибка "поставьте ; перед ."
В чем дело???
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #18 : 31 Декабрь 2006, 06:49:37 »

Можно так сделать:
Код:
CBitmap my_class::bitmap;
BOOL b = my_class::bitmap.LoadBitmap(IDB_BITMAP1);
Записан

Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2015, Simple Machines Valid XHTML 1.0! Valid CSS!