我有一個TRttiProperty
變量命名aRttiProperty
,指向下面的屬性:RTTI:如何獲取字段的對象指針?
Tsubscription = class(TMyObject)
private
fBilling: TMyObject;
public
property billing: TMyObject read fBilling; // << aRttiProperty point to this member
end;
現在,我怎麼能提取aRttiProperty
的fBilling
對象的指針?
我嘗試做這樣的,但它不工作:
function Tsubscription.getfBillingObj(const aRttiProperty: TRttiProperty): TMyObject
begin
Result := aRttiProperty.GetValue(Self).AsType<TMyObject>;
end;
它返回父TSubscription
對象,而不是fbilling
場的對象。
那麼這僅僅是矯枉過正,當你可以使用'結果:= MySubscriptionInstance.Billing;'代替。 –
@Remy - 我的猜測是Loki想寫給這個領域。 –
@SertacAkyuz:如果他需要'fBilling'字段本身的內存地址,那麼通過'TRttiProperty'並不是正確的方法(除非將其類型轉換爲「TRttiInstanceProperty」,然後解碼其PropInfo ^。 SetProc'值)。一個更好的選擇是通過使用'aRttiType.GetField('fBilling')Offset'(其中'aRttiType'代表'TSubscription'類)在'Tsubscription'類中獲得'fBilling'字段的偏移量,然後將該偏移量添加到「Tsubscription」對象的起始內存地址。 –