問題描述如下,有乙個結構體
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表方法的...