有人知道 Classes.RemoveFixups 的作用嗎? |
缺席
|
maomfh
初階會員 發表:3 回覆:10 積分:27 註冊:2008-01-05 發送簡訊給我 |
我在看 TPersistent 源碼時.發現 TPersistent.Destroy 叫用 RemoveFixups.
destructor TPersistent.Destroy; begin RemoveFixups(Self); inherited Destroy; end; 這其中的RemoveFixup(Self); 不知什麼作用, 查看了源碼, 只知在ReadComponent時,會依某些類別物件 去產生一個 TPropFixup物件,然後將這個TPropFixup物件, 放入一個 GlobalFixUpList 中. (這流程是我查找的,也許可能不對) 問題1 : 什麼樣的 物件會被放入這個 GlobalFixUpList 中呀? 為什麼要放進去. 問題2 : 可以説明一下 RemoveFixups 及相關的說明嗎?
------
Maomfh | |||||||||
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
我沒研究過,這裡有說明
http://www.savs.hcc.edu.tw/~chuavv/fpc/rtl/classes/removefixups.html RemoveFixupsRemoves Instance from the fixup list.DeclarationSource position: classesh.inc line 1723DescriptionRemoveFixups removes all entries for component Instance from the list of unresolved references.aSee also
|
|||||||||
maomfh
初階會員 發表:3 回覆:10 積分:27 註冊:2008-01-05 發送簡訊給我 |
謝謝你的回覆. 但這說明我也有看過,但說得不是很清楚.... 我有自己再研究了一下.
FixupList主要是使用在 ReadComponent 的時候. 通常在建造一個 TForm 時, TForm.Create會從exe檔 的 rsrc 資源裡, 讀入關於 Form 中所有的 Published 的屬性 和 元件, 並為Form中的所有Published 屬性 和 元件變數 進行設定. 而一般的屬性可直接讀入設定值, 嵌入的元件則利用RTTI來建造. 但另有一狀況則是屬性是參考到別的物件, 像TDBGrid 參考到 TDataSource, 因為被參考的物件可能是別的 Form 或Module 所建造的, 而在本身的Form建立時,如果找不到讓參考目標,這時就要將這個修正需求加入 FixupList, 以待將來該物件被載入時可以修正到這個 Form 中的物件參考. 另外為什麼要在 元件移除時要做 RemoveFixups 是因元件要被移除,那它必需將參考到這個物件的物件指標清除, 不然那些物件參考會指到非法的位址而不自知. 擧個例子.我們常利用TDataModule 來置放 TTable, TDataSouse, 等等.... , 而這些 TDataMoudle 上面的元件, 常被我們的 Form 裡面的元件所參考..這時候就需要 FixupList 來 做修正的工作了. 以上是我的想法. 也許有誤.. 歡迎指正.. 請不吝賜教.
------
Maomfh
編輯記錄
maomfh 重新編輯於 2008-08-25 12:04:54, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |