結構體版本相容問題

2021-07-11 18:13:04 字數 670 閱讀 7243

問題描述如下,有乙個結構體

struct installinfo

;如果新的exe去訪問舊的dll。此時,就會出現字段錯位的bug。新的installinfo裡面的記憶體布局是:

nfilesize:安裝包大小

lpszmd5:安裝包

md5

lpszupdateinfo:安裝包的更新資訊

lpszversion:安裝包的版本號

而舊的installinfo裡面的記憶體布局是:

nfilesize:安裝包大小

lpszmd5:安裝包

md5

lpszversion:安裝包的版本號

當新的exe(新的installinfo)去訪問舊的dll(舊的installinfo)時,獲取到的lpszupdateinfo欄位將會被錯誤賦值成lpszversion,從而造成bug。

正確的做法是後面擴充套件增加的字段應該位於結構體的後面,如下所示:

struct installinfo

;這時的記憶體布局是:

nfilesize:安裝包大小

lpszmd5:安裝包

md5

lpszversion:安裝包的版本號

lpszupdateinfo:安裝包的更新資訊

此時用新的exe去訪問舊的dll,就不會出現錯誤問題了。

版本相容問題

想明白為什麼,切入點在 開發包是切入點,就譬如jdk,android開發包,所有的hibernate,spring,strusts等框架都是基於jdk,依賴jdk的基礎上去封裝搭建的。假如jdk公升級,高版本jdk需要考慮相容低版本jdk的寫法方法等,這樣子基於低版本jdk開發的系統和框架才能將jd...

版本相容問題概述

在vb中,第一次把部件工程生成可執行檔案 exe dll 或者 ocx 時,visual basic 自動把 版本相容 選項設為 工程相容 並向已生成的可執行檔案中插入路徑。這可以保證從乙個開發任務轉向另乙個時,測試工程和部件仍能保持連線。如果因為某些原因工程被設定為 不相容 可以手工修改它為另兩種...

unordered map版本相容問題

在c 中最讓我蛋疼的事情之一就是unordered map千呼萬喚才出來,在c 早期版本標準庫裡面只有map這個字典。但是map的內部實現是採用的紅黑樹,眾所周知,對於字典這類結構也可以用hash表來實現,也就是c 的標準庫應該也要有hash map這種資料結構。在c 中關於map的hash表方法的...