線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1267
推到 Plurk!
推到 Facebook!

有人知道 Classes.RemoveFixups 的作用嗎?

缺席
maomfh
初階會員


發表:3
回覆:10
積分:27
註冊:2008-01-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-08-23 00:40:42 IP:218.163.xxx.xxx 訂閱
我在看 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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-08-25 08:51:23 IP:60.248.xxx.xxx 未訂閱
我沒研究過,這裡有說明

http://www.savs.hcc.edu.tw/~chuavv/fpc/rtl/classes/removefixups.html


RemoveFixups

Removes Instance from the fixup list.

Declaration

Source position: classesh.inc line 1723
procedure RemoveFixups(
Instance: TPersistent
);

Description

RemoveFixups removes all entries for component Instance from the list of unresolved references.a

See also

RedirectFixupReferences Redirects references under the root object from OldRootName to NewRootName
RemoveFixupReferences Removes references to rootname from the fixup list.
maomfh
初階會員


發表:3
回覆:10
積分:27
註冊:2008-01-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-08-25 11:55:15 IP:218.163.xxx.xxx 訂閱
謝謝你的回覆. 但這說明我也有看過,但說得不是很清楚....  我有自己再研究了一下.
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, 註解 無‧
系統時間:2024-03-29 20:43:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!