最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

總結(jié)升級(jí)易語(yǔ)言支持庫(kù)保證向下兼容性

 更新時(shí)間:2018年11月30日 10:23:45   投稿:laozhang  
在本文里小編給大家整理了關(guān)于升級(jí)易語(yǔ)言支持庫(kù)保證向下兼容性的知識(shí)點(diǎn)注意提防,需要的朋友們參考下。

易語(yǔ)言支持庫(kù)升級(jí)之后,要保證向下兼容性,主要是做到以下幾點(diǎn):

一:保證原有的易語(yǔ)言源程序(.e)能正常打開(kāi)(兼容點(diǎn)1)、正常編譯(兼容點(diǎn)2)、編譯結(jié)果正確(兼容點(diǎn)3);

二:保證原有的易語(yǔ)言程序(.exe)能正常運(yùn)行(兼容點(diǎn)4)、運(yùn)行結(jié)果正確(兼容點(diǎn)5)。

這里說(shuō)的“原有的易語(yǔ)言源程序”和“原有的易語(yǔ)言程序”是指,替換新版支持庫(kù)文件之前,使用舊版支持庫(kù)編寫(xiě)的易語(yǔ)言源程序,和使用該源程序編譯生成的可執(zhí)行程序。

本文主要就此問(wèn)題結(jié)合具體情況進(jìn)行分析和總結(jié)。

一,為支持庫(kù)增加一條命令

新增加的命令,必須放在所有原有命令的后面,否則將違反兼容點(diǎn)2和4,更無(wú)法保證兼容點(diǎn)3和5。這是因?yàn)?,在源程序和EXE中,記錄的都是命令的索引,一旦在中間插入一條命令,將導(dǎo)致后面的命令索引全變了,進(jìn)而導(dǎo)致非常嚴(yán)重的錯(cuò)位問(wèn)題。只要記住,總是在所有命令的最后添加新的命令,就不會(huì)引入兼容性問(wèn)題。具體到數(shù)據(jù)類型的成員方法,與上面的分種一致,因?yàn)樗彩鞘褂弥С謳?kù)中唯一的全局函數(shù)表的,但這里引入了一個(gè)新的細(xì)節(jié),有一個(gè)LIB_DATA_TYPE_INFO.m_pnCmdsIndex 用于指定方法在全局函數(shù)表中的命令索引,所以通過(guò)它可以調(diào)整各成員方法的順序,這種做法通常不會(huì)引入兼容性問(wèn)題。

二,為命令增加一個(gè)參數(shù),或修改命令的參數(shù)

新增加的參數(shù),必須放在所有參數(shù)的后面,否則將違反兼容點(diǎn)2,3,4,5;必須允許省略該參數(shù)(AS_DEFAULT_VALUE_IS_EMPTY)或該參數(shù)有默認(rèn)值(AS_HAS_DEFAULT_VALUE);同時(shí)在編寫(xiě)代碼讀取該參數(shù)值時(shí)要小心,須判斷nArgCount和MDATA_INF.m_dtDataType(否則違反兼容點(diǎn)4,5),大致大代如下:

void fn_Global_SetWindowRgn (PMDATA_INF pRetData, INT nArgCount, PMDATA_INF pArgInf) { int nArg1 = pArgInf[0].m_int; int nArg2 = pArgInf[1].m_int; //假設(shè)第三個(gè)參數(shù)是新版添加的參數(shù) int nArg3 = 0; if(nArgCount > 2 && pArgInf[2].m_dtDataType != _SDT_NULL) { nArg3 = pArgInf[2].m_int; } //... }

修改一個(gè)已有命令的參數(shù)時(shí),不能隨便修改數(shù)據(jù)類型,否則將違反兼容點(diǎn)2,3,4,5,要改也只能改成通用型(同時(shí)在代碼中根據(jù)參數(shù)傳遞來(lái)的真實(shí)類型(MDATA_INF.m_dtDataType)做相應(yīng)處理)。參數(shù)的名稱和說(shuō)明,因?yàn)槎际俏谋?,可以隨便改,有會(huì)有兼容性問(wèn)題,但不要改的意思與原來(lái)相反哦(排除原來(lái)失誤寫(xiě)反了的情況),改變參數(shù)語(yǔ)義往往會(huì)導(dǎo)致代碼改動(dòng),進(jìn)而導(dǎo)致違反兼容點(diǎn)5。

三,為窗口組件增加屬性

新增加的屬性,必須放在已有屬性的后面,否則違反兼容點(diǎn)4,5,因?yàn)橐渍Z(yǔ)言運(yùn)行時(shí)是通過(guò)屬性的索引讀寫(xiě)屬性值的。然后在序列化屬性值時(shí),提高一個(gè)版本號(hào),讀取時(shí)先判斷版本,舊版序列化出的數(shù)據(jù)少,就不能多讀。在此提示,序列化屬性值時(shí),一定要先寫(xiě)出版本號(hào),如果沒(méi)有版本號(hào),后續(xù)的兼容性問(wèn)題多多。

(TODO:這一段另成一文)但即使有了版本號(hào),使用不當(dāng),也會(huì)導(dǎo)致升級(jí)時(shí)的麻煩,我前一段就遇到過(guò),代碼有這么一句:if(dwVersion > CURRENT_VER) return FALSE; 版本號(hào)比現(xiàn)在能處理的版本號(hào)大,出現(xiàn)在什么情況呢,用舊版支持庫(kù)打開(kāi)/運(yùn)行用新版支持庫(kù)編譯的易源程序/程序。返回假是合理的(畢竟不能完全處理這種情況),但是比較粗暴(這意味著無(wú)法用舊版支持庫(kù)打開(kāi)用新版支持庫(kù)編寫(xiě)的源程序/程序,這不是向下兼容的問(wèn)題,是向上兼容的問(wèn)題),如果能盡量讀取,放棄不能識(shí)別的數(shù)據(jù),溫和的處理,效果更好。簡(jiǎn)單的把這條判斷語(yǔ)句刪除,有用嗎?當(dāng)然沒(méi)用,舊版的支持庫(kù)已經(jīng)在用戶手上了,編譯結(jié)果是確定的,你的改動(dòng)只能體現(xiàn)在新版中,而對(duì)舊版無(wú)能為力。解決這個(gè)問(wèn)題需要技巧,我采取的方案是,版本號(hào)不升反降!即,把CURRENT_VER減小,那么我序列化出的數(shù)據(jù),版本號(hào)比以前還小,舊版支持庫(kù)里的那條判斷(if(dwVersion > CURRENT_VER))就不起作用了,嘿嘿。新的序列化數(shù)據(jù)版本更低,但寫(xiě)的數(shù)據(jù)更多,需要擔(dān)心舊版支持庫(kù)讀出多余的數(shù)據(jù)來(lái)嗎?當(dāng)然不用,舊版支持庫(kù)的編譯結(jié)果和運(yùn)行結(jié)果是確定的。只要新版支持庫(kù)中識(shí)別出這種情況,不要因?yàn)榘姹咎?hào)小就認(rèn)為是舊版就行了,同時(shí)后續(xù)升級(jí)的方便,再引入一個(gè)新的版本號(hào),存到原有序列化數(shù)據(jù)的最后,這樣再次升級(jí)時(shí)直接判斷新版本號(hào)就行了,原有的那套版本號(hào)停止使用。這一段有點(diǎn)亂,需整理。

四,為數(shù)據(jù)類型增加私有成員

如果某個(gè)數(shù)據(jù)類型已經(jīng)有了一個(gè)或多個(gè)私有成員,升級(jí)時(shí)需要增加一個(gè)私有成員,該怎么辦,直接在LIB_DATA_TYPE_ELEMENT 數(shù)組中添加一項(xiàng)嗎?不行!這樣將違反兼容點(diǎn)4,5,因?yàn)閷?duì)象所占用內(nèi)存是在由EXE分配的,舊的EXE中只為對(duì)象分配了N個(gè)成員的空間,而新庫(kù)要去訪問(wèn)第N+1個(gè)成員,不就發(fā)生內(nèi)存訪問(wèn)越界的錯(cuò)誤了嗎?解決方案是,把原來(lái)的N個(gè)私有成員連用新增加的成員,集中存儲(chǔ)到一塊新分配的內(nèi)存中,然后把這個(gè)內(nèi)存地址存儲(chǔ)到原有的第一個(gè)私有成員位置上(原有的其它成員位置廢棄不用)。因?yàn)榧词故桥fEXE也會(huì)調(diào)用新支持庫(kù)中的構(gòu)造函數(shù)和析構(gòu)函數(shù),所以改變私有成員存儲(chǔ)位置不會(huì)影響程序的執(zhí)行。這種方案對(duì)代碼的影響是非常大的,需要修改很多地方(所有對(duì)私有成員的讀寫(xiě)),但是為了保證支持庫(kù)的向下兼容性,這種付出是值得的。

相關(guān)文章

  • 詳解易語(yǔ)言線程同步

    詳解易語(yǔ)言線程同步

    在本篇內(nèi)容中我們給大家詳細(xì)分享了關(guān)于易語(yǔ)言多線程之線程同步的相關(guān)知識(shí)點(diǎn)內(nèi)容,需要的朋友們學(xué)習(xí)下。
    2018-12-12
  • 總結(jié)易語(yǔ)言指針轉(zhuǎn)換及調(diào)用方法

    總結(jié)易語(yǔ)言指針轉(zhuǎn)換及調(diào)用方法

    在本篇文章中我們給大家分享了關(guān)于易語(yǔ)言指針轉(zhuǎn)換及調(diào)用方法相關(guān)知識(shí)內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2018-11-11
  • 易語(yǔ)言盜號(hào)源碼編寫(xiě)及使用方法

    易語(yǔ)言盜號(hào)源碼編寫(xiě)及使用方法

    在本篇內(nèi)容里小編給大家分享的是關(guān)于易語(yǔ)言d號(hào)源碼編寫(xiě)及使用方法,需要的朋友們可以跟著學(xué)習(xí)下。
    2018-12-12
  • 易語(yǔ)言制作國(guó)王的勇士輔助步驟

    易語(yǔ)言制作國(guó)王的勇士輔助步驟

    在本篇文章里小編給大家分享了關(guān)于易語(yǔ)言制作國(guó)王的勇士輔助步驟教程,有興趣的朋友們可以學(xué)習(xí)下。
    2019-01-01
  • 易語(yǔ)言求次方命令使用講解

    易語(yǔ)言求次方命令使用講解

    今天小編就為大家分享一篇關(guān)于易語(yǔ)言求次方命令使用講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-11-11
  • 易語(yǔ)言模擬鼠標(biāo)點(diǎn)擊實(shí)現(xiàn)方法

    易語(yǔ)言模擬鼠標(biāo)點(diǎn)擊實(shí)現(xiàn)方法

    在本篇內(nèi)容里小編給各位分享了關(guān)于易語(yǔ)言如何實(shí)現(xiàn)模擬鼠標(biāo)點(diǎn)擊的教學(xué)內(nèi)容,對(duì)此有興趣的朋友們可以學(xué)習(xí)下。
    2019-01-01
  • 易語(yǔ)言在畫(huà)板中畫(huà)弦的方法

    易語(yǔ)言在畫(huà)板中畫(huà)弦的方法

    今天小編就為大家分享一篇關(guān)于易語(yǔ)言在畫(huà)板中畫(huà)弦的方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-11-11
  • 易語(yǔ)言設(shè)置在畫(huà)板中寫(xiě)出文字的字體

    易語(yǔ)言設(shè)置在畫(huà)板中寫(xiě)出文字的字體

    今天小編就為大家分享一篇關(guān)于易語(yǔ)言設(shè)置在畫(huà)板中寫(xiě)出文字的字體,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-11-11
  • 易語(yǔ)言電腦屏幕鎖定工具源碼

    易語(yǔ)言電腦屏幕鎖定工具源碼

    今天小編就為大家分享一篇關(guān)于易語(yǔ)言電腦屏幕鎖定工具源碼,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • 易語(yǔ)言讀取Word文檔方法

    易語(yǔ)言讀取Word文檔方法

    在本篇內(nèi)容里小編為大家分享的是關(guān)于易語(yǔ)言讀取Word文檔內(nèi)容的方法,需要的朋友們可以學(xué)習(xí)下。
    2018-12-12

最新評(píng)論

辛集市| 鄢陵县| 深州市| 高州市| 金湖县| 婺源县| 景谷| 桐城市| 大足县| 宾川县| 海宁市| 吉水县| 龙岩市| 通榆县| 翁牛特旗| 德兴市| 大石桥市| 兰溪市| 汝阳县| 常州市| 澎湖县| 沅江市| 鄄城县| 枣强县| 锦州市| 南雄市| 容城县| 汝阳县| 宜阳县| 鹰潭市| 宁海县| 揭阳市| 阿拉尔市| 旌德县| 蕉岭县| 托克逊县| 兴隆县| 安图县| 延津县| 忻州市| 连云港市|