讓mfc中object的版本號起作用的注意事項
黃國強 2010-4-13
下面這段**取自msdn:
implement_serial(cmyobject, cobject, versionable_schema|1)
void cmyobject::serialize(carchive& ar)
}else
}上面的msdn**本身並沒有問題,但是使用起來,有可能ar.getobjectschema()不能獲得正確的版本 號。
下面先寫乙個錯誤的**示例
// 將aobj儲存到檔案中,這段**的版本號未儲存。
cmyobject aobj;
cfile f("c://temp//test.dat",cfile::modecreate|cfile::modewrite);
carchive ar(&f,carchive::store);
aobj.serialize(ar);// 此處版本號未儲存
有兩種方法可以解決這個問題:
1) 使用cobarray
示例:cobarray aobarray;
cmyobject aobj;
obarray.add(&aobj);
cfile f("c://temp//test.dat");
carchive ar(&f,carchive::store);
aobarray.serialize(ar);// 此處儲存了正確的版本號
2) 使用 carchive::serializeclass(const cruntimeclass* pclassref)
示例:cmyobject aobj;
cfile f("c://temp//test.dat",cfile::modecreate|cfile::modewrite);
carchive ar(&f,carchive::store);
// 必須加上此行
ar.serializeclass(runtime_class(cmyobject));
aobj.serialize(ar);// 此處儲存了正確的版本號
附:另乙個比較複雜的示例
class cbase : public cobject
~cbase(void){}
void serialize( carchive& ar );
declare_serial(cbase)
};implement_serial( cbase, cobject, versionable_schema | 2 )
void cbase::serialize(carchive& ar )
}class cderived : public cbase
~cderived(void){}
void serialize( carchive& ar );
declare_serial(cderived)
};implement_serial( cderived, cbase, versionable_schema | 10 )
void cderived::serialize(carchive& ar)
}
ATL 和 MFC 版本號
下表列出了 visual c 附帶的 atl 的各版本號。atl 版本 visual c 版本 1.0,1.1,2.0 無。在 visual c 4.x 時間範圍內發布到 web。3.0visual c 6.0 7.0visual c net 2002 7.1visual c net 2003 8....
MFC 獲取程式的版本號
1.引入version.lib pragma comment lib,version.lib 因為我們需要用到verqueryvalue,這一步不可缺少。2.新增 char infobuf new char infosize getfileversioninfo cpath,0,infosize,i...
讓IAR生成SVN版本號
對於原始碼svn受控的專案,很希望svn版本號作為軟體版本的一部分,在linux使用shell指令碼很容易搞定這個事情,但在windows下的嵌入式專案就麼有那麼容易。最近在iar中成功使用pre build功能搞定了這個事情,具體見如下的步驟 1.首先保證你的svn客戶端支援控制台命令,我使用的是...