作者:承诺你的慌言_153 | 来源:互联网 | 2023-05-18 19:37
我还是第一次写程序,遇到难题。。我写的是一个3D软件的插件,就是DLL,我要在插件里实现文件写入的功能,我想知道用MFC的“串行化”写入可不可以,我看了有关资料,这样说:要让用户定义的
我还是第一次写程序,遇到难题。。
我写的是一个3D软件的插件,就是DLL,我要在插件里实现文件写入的功能,我想知道
用MFC的“串行化”写入可不可以,我看了有关资料,这样说:
要让用户定义的类支持串行化,一般分为五步:
1.从CObject或其派生类派生出用户的类
2.重载Serialize()成员函数,加入必要的代码,用以保存对象的数据成员到CArchive对象以及从CArchive对象载入对象的数据成员状态。
3.在类声明文件中,加入DECLARE_SERIAL宏。编译时,编译器将扩充该宏,这是串行化对象所必需的。
4.定义一个不带参数的构造函数。
5.在实现文件中加入IMPLEMENT_SERIAL宏。
我照做了,可是只要加上第五步编译的时候就出错,没有第五步编译可以通过,而构建的
时候说是link 2001 link 2002错误,这是为何?
是不是需要包括什末头文件我没加啊?
5 个解决方案
我是想先把需要的数据读入自定义的类中,然后再把这些数据写成文件,然后在自己写的软件
中再读入。
哪位大虾能告诉我完整的解决方案,在下感激不尽。。。
出错也许是你把IMPLEMENT_SERIAL写错了,应该是三个参数。你代码里
DECLARE_SERIAL( cr_mesh,CObject) //我想你是笔误吧,应该是IMPLEMENT_SERIAL(...,...,...)
void cr_mesh::Serialize(CArchive& ar){
CObject::Serialize( ar);
if(ar.IsStoring()){
}
}
啊天啊!真的是这样, 谢谢你!
那现在我想把cr_mesh的一个实例写入文件还应该怎样写?比如说写到c:/a.dat
for ( ; !dagIterator.isDone(); dagIterator.next() ) {
dagIterator.getPath( path );
int i=0;
vectorobj;
obj[i]=new cr_mesh(path);//顺便问一下这里这样写可以吗?在没指定vector长度的情况下就给其元素付值?
i++;
}