void CDWordArray::Serialize(CArchive& ar){       ASSERT_VALID(this);       CObject::Serialize(ar);       if (ar.IsStoring())       {              ar.WriteCount(m_nSize);                                               //把数组大小写入ar              ar.Write(m_pData, m_nSize * sizeof(DWORD));                     //把整个数组写入ar       }       else       {              DWORD nOldSize = ar.ReadCount();                             //从ar中读出数组大小              SetSize(nOldSize);  //改变m_nSize              ar.Read(m_pData, m_nSize * sizeof(DWORD));               //从ar中读出整个数组       }}
 
请问这里加粗的两处是什么意思?在这里有特殊作用吗?我找了老半天网上都没有这两个函数的详细介绍先谢了。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/helonSY/archive/2010/06/19/5680604.aspx

解决方案 »

  1.   

    请您仔细看一下,我说的是ar.WriteCount(m_nSize)和ar.ReadCount()啊
      

  2.   

    这两个应该是未公开的内部函数,MSDN中都没有
      

  3.   

    ar.WriteCount(m_nSize) 指定将要存贮的数组的大小
    ar.ReadCount(...)读出数组的大小你博客里的文章,虽然是转 别人的,但是你没有看懂就转了?
      

  4.   

     
    看懂了,里面没讲这辆个函数,那人也不是原创,是侯捷  深入浅出MFC里的呵呵
      

  5.   

    // special functions for reading and writing (16-bit compatible) counts
    DWORD CArchive::ReadCount();
    void CArchive::WriteCount(DWORD dwCount);兼容16位机器,你这里也可以使用CArchive::Write()
      

  6.   

    MSDN里没写出来,很可能是在MFC后来的版本被MS给废弃了
      

  7.   

    部长,先感谢您的回答,没想到您这么晚还没睡?您手边如果有 深入浅出MFC/2e  的话,劳烦您翻到p375,您看下那一夜灰色框的部分,在CArray::Serialize里调用了SerializeElements,而这个里面却又调用了CArchive::Write函数啊,那在前面的CArray::Serialize里调用CArchive::ReadCount干嘛?还是有点迷糊,其实我已经看了这两个函数的源代码,也差不多看懂了,但用在那里到底有什么特殊的作用还有点迷糊。
      

  8.   

    它的SerializeElements是个函数模板,在其他函数内部调用CArchive::Read()或者CArchive::Write()来读或者写。具体是读下面的那个Serialize函数,先写入该类型对象的大小,然后将对象写入通过调用SerializeElements()或者先读出该类型对象的大小,然后也是通过SerializeElements()来读出该对象的信息。
      

  9.   

    Sorrry,上面的没有写完就回复出去了囧它的SerializeElements是个函数模板,在其他函数内部调用CArchive::Read()或者CArchive::Write()来读或者写。具体是读还是写,通过CArchive::InStoring()来判断。下面的那个Serialize函数,先写入该类型对象的大小,然后将对象写入通过调用SerializeElements()或者先读出该类型对象的大小,然后也是通过SerializeElements()来读出该对象的信息。