最近寫程式使用到的功能,要從 Interface 及 Pointer 之間轉換型別。
不過網路上只找到物件及 Pointer 之間互相轉換的範例,簡單說就是先判斷是否為合法的物件指標,再判斷是否為我們想要的物件型別,內容如下:
TObject(Ptr) as TTargetClass
自己改寫成 Interface 版本:
IUnknown(Ptr) as ITargetInterface
另外,在寫程式的過程中有發現一個問題,取物件或 Interface 的指標時,不能使用 @ 前置符號,這樣取得的指標有可能是變數所在位址,而不是物件或 Interface 的所在位址,要特別小心。
Obj 為物件變數,錯誤範例:
Ptr := @Obj;
正確應該要這樣寫:
Ptr := Pointer(Obj);