<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Serialize CArray]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe eine Klasse CHistorie, mit einer CArray-MemberVar vom Typ CValue&amp;.<br />
CValue enthält int, CString und bool MemberVar.</p>
<p>Wenn ich Serialisiere...</p>
<pre><code class="language-cpp">void CHistorie::Serialize(CArchive &amp;ar)
{
  CObject::Serialize(ar);
  m_Historie.Serialize(ar);   // CArray serilisieren
  if (ar.IsStoring())
    ar &lt;&lt; m_ID;               // integer-Member auch noch serialisieren
  else
    ar &gt;&gt; m_ID;
}
</code></pre>
<p>Es werden jetzt alle Member von CValue wieder richtig eingelesen - außer der CString. (bin mir im Debugger nicht sicher, ob er Daten enthält oder auf fremden Speicher zeigt)</p>
<p>Weiß jemand woran das liegen könnte?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/6418/serialize-carray</link><generator>RSS for Node</generator><lastBuildDate>Sun, 19 Apr 2026 01:44:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/6418.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 01 Jul 2003 12:44:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Serialize CArray on Tue, 01 Jul 2003 12:44:00 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe eine Klasse CHistorie, mit einer CArray-MemberVar vom Typ CValue&amp;.<br />
CValue enthält int, CString und bool MemberVar.</p>
<p>Wenn ich Serialisiere...</p>
<pre><code class="language-cpp">void CHistorie::Serialize(CArchive &amp;ar)
{
  CObject::Serialize(ar);
  m_Historie.Serialize(ar);   // CArray serilisieren
  if (ar.IsStoring())
    ar &lt;&lt; m_ID;               // integer-Member auch noch serialisieren
  else
    ar &gt;&gt; m_ID;
}
</code></pre>
<p>Es werden jetzt alle Member von CValue wieder richtig eingelesen - außer der CString. (bin mir im Debugger nicht sicher, ob er Daten enthält oder auf fremden Speicher zeigt)</p>
<p>Weiß jemand woran das liegen könnte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/31151</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/31151</guid><dc:creator><![CDATA[MuehBln]]></dc:creator><pubDate>Tue, 01 Jul 2003 12:44:00 GMT</pubDate></item><item><title><![CDATA[Reply to Serialize CArray on Tue, 01 Jul 2003 14:02:00 GMT]]></title><description><![CDATA[<p>Du musst diese Funktion</p>
<pre><code class="language-cpp">template&lt;class TYPE&gt;
void AFXAPI SerializeElements(CArchive&amp; ar, TYPE* pElements, INT_PTR nCount)
{
    ASSERT(nCount == 0 ||
        AfxIsValidAddress(pElements, (size_t)nCount * sizeof(TYPE)));

    // default is bit-wise read/write
    if (ar.IsStoring())
   {
      TYPE* pData;
      UINT_PTR nElementsLeft;

      nElementsLeft = nCount;
      pData = pElements;
      while( nElementsLeft &gt; 0 )
      {
         UINT nElementsToWrite;

         nElementsToWrite = UINT(min(nElementsLeft, INT_MAX/sizeof(TYPE)));
         ar.Write(pData, nElementsToWrite*sizeof(TYPE));
         nElementsLeft -= nElementsToWrite;
         pData += nElementsToWrite;
      }
   }
    else
   {
      TYPE* pData;
      UINT_PTR nElementsLeft;

      nElementsLeft = nCount;
      pData = pElements;
      while( nElementsLeft &gt; 0 )
      {
         UINT nElementsToRead;

         nElementsToRead = UINT(min(nElementsLeft, INT_MAX/sizeof(TYPE)));
         ar.Read(pData, nElementsToRead*sizeof(TYPE));
         nElementsLeft -= nElementsToRead;
         pData += nElementsToRead;
      }
   }
}
</code></pre>
<p>(siehe afxtempl.h)</p>
<p>für deine Klasse CValue überschreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/31152</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/31152</guid><dc:creator><![CDATA[RenéG]]></dc:creator><pubDate>Tue, 01 Jul 2003 14:02:00 GMT</pubDate></item><item><title><![CDATA[Reply to Serialize CArray on Wed, 02 Jul 2003 05:58:00 GMT]]></title><description><![CDATA[<p>Danke erstmal René<br />
Oh je, da seh ich die nächsten Probleme...<br />
Ich habe noch nicht so oft mit Templates gearbeiten - also noch ein paar Fragen:</p>
<p>Du hast gesagt ich muss die SerializeElements von CValue überschreiben?<br />
In der Klasse CHistorie habe ich die Membervariable m_Historie:</p>
<pre><code class="language-cpp">class CHistorie : public CObject
{
  DECLARE_SERIAL(CHistorie)
  protected:
    CArray&lt;CValue, CValue&amp;&gt; m_Historie;
    ...
</code></pre>
<p>Muss ich jetzt in CValue eine Methode, wie folgt definieren?</p>
<pre><code class="language-cpp">void AFXAPI CValue::SerializeElements(CArchive&amp; ar, TYPE* pElements, INT_PTR nCount)
</code></pre>
<p>Kannst Du mir da mal bitte etwas genauer weiterhelfen? (Oder vielleicht einen Link geben?)</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/31153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/31153</guid><dc:creator><![CDATA[MuehBln]]></dc:creator><pubDate>Wed, 02 Jul 2003 05:58:00 GMT</pubDate></item><item><title><![CDATA[Reply to Serialize CArray on Wed, 02 Jul 2003 06:34:00 GMT]]></title><description><![CDATA[<p>Gibt noch ne simplere Möglichkeit. Und zwar kannst Du Dein CValue von CObject ableiten, dort dann mit DECLARE_SERIAL die Klasse serialisierbar machen, und die Funktion Serialize(...) überschreiben.<br />
Dann fügst Du alle Deine CValue-Elemente nicht in ein CArray&lt;&gt; ein, sondern in ein CObArray. Die Serialize-Funktion von CObArray übernimmt dann das Speichern der einzelnen Elemente, indem sie für jedes Element die Serialize-Funktion aufruft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/31154</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/31154</guid><dc:creator><![CDATA[RenéG]]></dc:creator><pubDate>Wed, 02 Jul 2003 06:34:00 GMT</pubDate></item><item><title><![CDATA[Reply to Serialize CArray on Wed, 02 Jul 2003 07:28:00 GMT]]></title><description><![CDATA[<p>Serialize hatte ich bei CValue ja schon implementiert, da ich dachte CArray benutzt die Fkt dann auch.</p>
<p>Muss ich bei CObArray irgendwelche Besonderheiten beachten?<br />
Ich habe in der MSDN gelesen,<br />
... dass nur die Zeiger gelöscht werden. Muss ich also beim entfernen das Objekt auch noch selbst löschen?<br />
... Sollte man SetSize vorher aufrufen? Es können bei mir maximal 999 Elemente eingefügt werden. Aber SetSize gleich auf 999 ist doch eftwas heftig oder?<br />
... was hat das mit dem CDumpContext auf sich?<br />
... leite ich meine Array Klasse von CObArray ab oder gibts da auch nen Template?</p>
<p>Danke</p>
<p>[ Dieser Beitrag wurde am 02.07.2003 um 09:46 Uhr von <strong>MuehBln</strong> editiert. ]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/31155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/31155</guid><dc:creator><![CDATA[MuehBln]]></dc:creator><pubDate>Wed, 02 Jul 2003 07:28:00 GMT</pubDate></item><item><title><![CDATA[Reply to Serialize CArray on Wed, 02 Jul 2003 08:25:00 GMT]]></title><description><![CDATA[<p>OK - habs gepackt...</p>
<p>Aber eine Frage noch in dem Zusammenhang.<br />
Beim Löschen von Elementen aus dem CObArray wird ja der Operator delete benutzt. Muss ich den für meine Klasse CValue (Elemente des Arrays) überladen oder lass ich den einfach von CObject?</p>
<p>Danke+</p>
]]></description><link>https://www.c-plusplus.net/forum/post/31156</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/31156</guid><dc:creator><![CDATA[MuehBln]]></dc:creator><pubDate>Wed, 02 Jul 2003 08:25:00 GMT</pubDate></item><item><title><![CDATA[Reply to Serialize CArray on Wed, 02 Jul 2003 09:07:00 GMT]]></title><description><![CDATA[<p>Löschen aus CObArray:</p>
<pre><code class="language-cpp">for( int i=0; i&lt;obArray.GetCount(); i++)
  delete obArray[i];  // nur delete, falls Du new zum Anlegen benutzt hast!
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/31157</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/31157</guid><dc:creator><![CDATA[RenéG]]></dc:creator><pubDate>Wed, 02 Jul 2003 09:07:00 GMT</pubDate></item><item><title><![CDATA[Reply to Serialize CArray on Wed, 02 Jul 2003 09:36:00 GMT]]></title><description><![CDATA[<p>Danke René, klappt jetzt alles.</p>
<p>Habe mal noch eine allg Frage:<br />
Wenn ich eine Klasse von CObject ableite, erbe ich ja den operator new und delete.<br />
Unter welcher Voraussetzung muss man diese in der eigenen Klasse überschreiben?<br />
Oder muss man das nie machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/31158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/31158</guid><dc:creator><![CDATA[MuehBln]]></dc:creator><pubDate>Wed, 02 Jul 2003 09:36:00 GMT</pubDate></item><item><title><![CDATA[Reply to Serialize CArray on Wed, 02 Jul 2003 09:47:00 GMT]]></title><description><![CDATA[<p>Muss man nie machen, da diese Operatoren einfach nur auf die globalen new/delete-Operatoren verweisen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/31159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/31159</guid><dc:creator><![CDATA[RenéG]]></dc:creator><pubDate>Wed, 02 Jul 2003 09:47:00 GMT</pubDate></item></channel></rss>