沒(méi)必要用#pragma pack(1), 自己定義結(jié)構(gòu)時(shí)記得對(duì)齊就是了,你看Windows里的絕大部分struct都是4字節(jié)對(duì)齊的(空位可以用reserved命名).
對(duì)齊肯定是有很多好處的,不然編譯器干嘛費(fèi)心去對(duì)齊結(jié)構(gòu)里的字段.
re: 安全密碼框的設(shè)計(jì) tanchuhan 2009-12-22 21:52
good,樓主寫(xiě)的很好。
挑點(diǎn)小錯(cuò)誤:
其實(shí)這是跟操作系統(tǒng)有關(guān)的,在WIN98下所用的進(jìn)程是共享一個(gè)4GB的虛擬內(nèi)存的,那個(gè)就沒(méi)什么你的我的了,所有的都是大家共有的,所以一個(gè)進(jìn)程對(duì)另一個(gè)進(jìn)程發(fā)送一個(gè)WM_GETEXT消息,應(yīng)為大家都是自己人所以密碼就告你了。但是到了NT后各個(gè)進(jìn)程就鬧分家了,每個(gè)進(jìn)程獨(dú)享4GB的虛擬內(nèi)存,各個(gè)進(jìn)程之間是互相隔離的,所以就沒(méi)人理你了。
---------------
Win95/98和NT都是一樣的進(jìn)程有各自的4G尋址空間(其中前面的1G/2G被系統(tǒng)保留,用來(lái)裝載系統(tǒng)DLL什么的)
WM_GETTEXT可以跨進(jìn)程獲取文本是微軟為了向后(win3x)兼容而作出特別處理的。照常理WM_GETTEXT的lParam非本進(jìn)程指針,直接寫(xiě)數(shù)據(jù)會(huì)崩潰。而微軟檢查到這條消息后特別處理,先在本進(jìn)程new一段緩沖區(qū),等WM_GETTEXT接收者寫(xiě)完后,再?gòu)?fù)制回發(fā)送者進(jìn)程的那段緩沖區(qū)。然后返回結(jié)果。
win9x和NT密碼框?qū)M_GETTEXT的不同反應(yīng)是因?yàn)楹笳呖紤]了安全性,而特意禁止的。
所以這和虛擬內(nèi)存是否共享無(wú)關(guān)。