Here's a special bit of MFC arcana that took quite a while to figure out! How do we serialize a CRuntimeClass ? Here's an example of how to do it from force.cpp file. The long comment explains why this was a difficult thing to do.
void cForceClassEvade::Serialize(CArchive &ar) { cForce::Serialize(ar); /* I had a hard time figuring out how to serialize the CRuntimeClass *_pnodeclass. (1) You can't call _pnodeclass.Serialize(ar), as this is not a method of CRuntimeClass. (2) Nor can you save off the CRuntimeClass m_lpszClassName field and try and use RUNTIME_CLASS to reconstruct it, as RUNTIME_CLASS requires a literal argument and not a CString. (3) MFC provides a CArchive::SerializeClass(CRuntimeClass *prtc). But it doesn't do the job either. It's actually designed more for use as a compatibility type-checker. If I put in ar.SerializeClass(_pnodeclass), when I save and load, I don't get anything read back into _pnodeclass because SerializeClass treats its argument as a const and won't change it in the load! (4) What DOES work is to save with ar.WriteClass(_pnodeclass) and load with _pnodeclass = ar.ReadClass(). */ if (ar.IsStoring()) //Writing data. { ar.WriteClass(_pnodeclass); ar << _evadechildclasses << _dartacceleration << _dartspeedup; } else //reading data { _pnodeclass = ar.ReadClass(); ar >> _evadechildclasses >> _dartacceleration >> _dartspeedup; } }