讓MFC中Object的版本號起作用的注意事項

2021-05-22 05:40:59 字數 1583 閱讀 3156

讓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客戶端支援控制台命令,我使用的是...