我声明的一个结构struct Data{ CString name;
int num;
}Data list[400];内存映射写到硬盘后,再映射到内存,CString name数据是“错误的指针”,而num正确。
请教是否由于CString name 只是一个“指针”,内存映射文件中不能包含CString成员?是否有方法,写盘时,把数据CString name写入硬盘。我整个代码用的CString name,改char工作量太大。
int num;
}Data list[400];内存映射写到硬盘后,再映射到内存,CString name数据是“错误的指针”,而num正确。
请教是否由于CString name 只是一个“指针”,内存映射文件中不能包含CString成员?是否有方法,写盘时,把数据CString name写入硬盘。我整个代码用的CString name,改char工作量太大。
可以再包装一个MyString,里面包含字符串数组,可以用模板实现不同长度的字符串数组节省空间。
类似MyString<5> string5; 定义5个字符长度
1) 从CFile派生自己的类,内部执行映射文件IO。
class CMyFileMappingClass : public CFile
{
public:
virtual UINT Read(void* lpBuf, UINT nCount);
virtual void Write(const void* lpBuf, UINT nCount);
virtual ULONGLONG GetLength() const;
virtual ULONGLONG Seek(LONGLONG lOff,UINT nFrom);
....!!!!
};2) 重载包含CString成员的那个类的Serialize()函数。
void CYourClass::Serialize(CArchive& ar)
{
CObject::Serialize(ar);
if (ar.IsStoring())
{
// 存储持久性对象到档案
ar << MyCStringObject;
}
else
{
// 从档案装载持久性对象
}3) 把这个CMyFileMappingClass送给CArchive。
CMyFileMappingClass file;
file.Open(....);
CArchive ar(&file, CArchive::store);
Serialize(ar); //启动序列化。
你可以使用CString,但你必须手动序列化来保存里面的数据.