Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function GetInterfaceEntry(const I: IInterface): PInterfaceEntry;
- var
- Instance: TObject;
- InterfaceTable: PInterfaceTable;
- j: integer;
- CurrentClass: TClass;
- begin
- Instance := I as TObject;
- if Assigned(Instance) then
- begin
- CurrentClass := Instance.ClassType;
- while Assigned(CurrentClass) do
- begin
- InterfaceTable := CurrentClass.GetInterfaceTable;
- if Assigned(InterfaceTable) then
- for j := 0 to InterfaceTable.EntryCount-1 do
- begin
- Result := @InterfaceTable.Entries[j];
- if Result.IOffset <> 0 then
- begin
- if Pointer(NativeInt(Instance) + Result^.IOffset) = Pointer(I) then
- Exit;
- end;
- // TODO: implement checking interface implemented via implements delegation
- // see System.TObject.GetInterface/System.InvokeImplGetter
- end;
- CurrentClass := CurrentClass.ClassParent
- end;
- end;
- Result := nil;
- end;
- function GetInterfaceIID(const I: IInterface; var IID: TGUID): boolean;
- var
- InterfaceEntry: PInterfaceEntry;
- begin
- InterfaceEntry := GetInterfaceEntry(I);
- Result := Assigned(InterfaceEntry);
- if Result then
- IID := InterfaceEntry.IID;
- end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement