Я сталкиваюсь с проблемой сериализации и десериализации данных указателя в VS2010 VC ++.По сути, программе не удалось сериализовать и десериализовать данные указателя CObList *.Исходный код выполняет обычные шаги для обработки процесса:
1) MyObject был унаследован от CObject;
2) Мы добавили DECLARE_SERIAL (MyObject) в объявлении класса (1-я строка);
3) Мы добавили IMPLEMENT_SERIAL (MyObject, MyParentObject, SCHEMA_VERSION)
//Where MyParentObject is inherited from CObject (indirectly, there're a few more levels of objects), SCHEMA_VERSION is just a version control CONSTANT we use
4) Затем мы перегружены
void MyObject::Serialize( CArchive& ar )
{
BOOL b;
.....
... (some other simple variables with default values)
MyParentObject::Serialize(ar);
if (ar.IsStoring())
{
ar << m_sTitle;
ar << m_pObjectsList;
}
else
{
ar >> m_sTitle;
ar >> m_pObjectsList;
}
}
Примечание: MyParentObject :: Serialize реализован соответственно,CObList * m_pObjectsList;в заголовочном файле объявлен правильно.
Программа вызвала нарушение прав доступа (исключение первого шанса при 0x52e77b2c (mfc100d.dll) в MyApp.exe: 0xC0000005: местоположение чтения нарушения доступа 0x00000004) при попытке десериализации из"ar >> m_pObjectsList".
Затем я начал тестирование и изменил сложный указатель m_pObjectsList на простой указатель на CString.Такая же ошибка возникает в то же время при десериализации указателя на CString.Если я просто сериализовать и десериализовать с помощью CString (без указателя), он работает нормально.Кажется, что некоторая сериализация указателя нарушена.
Может быть, MFC100d не работает с программой W32 в отладчике 64-битной ОС?Это вызывает проблемы как в режиме отладки, так и в режиме выпуска.Что происходит?Я исчерпал свои ресурсы, и любое направление или вдохновение очень ценится.Спасибо всем впереди.