[fpc-pascal] Interface performance

Tony Whyman tony.whyman at mccallumwhyman.com
Fri Nov 11 14:54:37 CET 2016


>   Isn’t MyObject2 still pointing to MyObject1?
If you go back to the FPC documentation, in the User Guide it says 
"Objects are stored in memory just as ordinary records with an extra 
field: a pointer to the Virtual Method Table (VMT)." My understanding is 
that an interface is stored similarly, except that a different VMT is 
used i.e. that which defines the interface. If you try and assign one to 
the other by just coercing the type then you will get undefined results.


On 11/11/16 11:25, Ryan Joseph wrote:
>> On Nov 11, 2016, at 5:52 PM, Tony Whyman <tony.whyman at mccallumwhyman.com> wrote:
>>
>> Someone else may correct me, but with CORBA, I believe you have to explicitly add a function to the interface such as
>>
>> function GetObject: TMyObject;
>>
>> and implement as
>>
>> function TMyObject.GetObject: TMyObject;
>> begin
>>   Result := self;
>> end;
> I think I’m out of time now but I’ll try this in my code that was crashing before.
>
> How is this different from just casting the interface to an object? There’s your example below basically like I was doing it before with the seemingly random crashes. Isn’t MyObject2 still pointing to MyObject1?
>
> type
> IMyInterface = interface
>     procedure MyProc;
> end;
>
> TMyObjectClass = class(TInterfacedObject,IMyInterface)
> public
>    procedure MyProc;
> end;
>
> var MyObject1, MyObject2: TMyObjectClass;
>       MyInterface: IMyInterface;
>
> begin
>   MyObject1 := TMyObjectClass.Create;
>   MyInterface := MyObject1;
>
>   MyInterface.MyProc;
>
>   MyObject2 := TMyObjectClass(MyInterface);
>
>   MyObject1.Free {OK for CORBA - will cause an exception in COM}
>   {MyObject1, MyObject2 and MyInterface are now all invalid}
> end;
>
>
> Regards,
> 	Ryan Joseph
>
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
>




More information about the fpc-pascal mailing list