有一个图像小波变换的问题首先,我定义了一个cdib的类,里面定义serialize的函数:void CDib::Serialize(CArchive& ar)
{
DWORD dwPos; // 获得此归档文件的CFile对象指针
dwPos = ar.GetFile()->GetPosition();
TRACE("CDib::Serialize -- pos = %d\n", dwPos); // 从归档文件缓冲区中冲掉未写入数据
ar.Flush(); // 重新获得此归档文件的CFile对象指针
dwPos = ar.GetFile()->GetPosition();
TRACE("CDib::Serialize -- pos = %d\n", dwPos); // 确定归档文件是否被存储,是则进行存储
if(ar.IsStoring()) {
Write(ar.GetFile());
} // 否则进行加载
else {
Read(ar.GetFile());
}
}另外一个类CDIBDisplayDoc,里面同样有个serialize的函数:{
m_pDibInit->Serialize(ar);
if (ar.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
}
}m_pDibInit的定义是 cdib* m_pDibInit;
但是程序在执行到m_pDibInit->Serialize(ar)的时候;
并没有调用cdib::serialize(),因此也就无法初始化m_opDibInit
为什么会出现这种情况呢?望大家帮我看看哈,谢谢了

解决方案 »

  1.   

    cdib* m_pDibInit;是笔误吧:CDib1,,Serialize是个虚函数  virtual void Serialize(CArchive& ar);2,,CDIB人要继承自 CObject3,,类中要增加宏
       .h:   DECLARE_SERIAL(CDIB)
      .cpp: IMPLEMENT_SERIAL(CDIB, CObject, 1)
      

  2.   

    你在CDIBDisplayDoc中重载了OnOpenDocument,,在里面应该调用CDocument::OnOpenDocument(lpszPathName);然后才会调用到你的Serialize()函数....建议细看<<深入浅出MFC>>
      

  3.   

    既然你有自己的读写函数,,,就可以不用Serialize()了