[fpc-pascal] Why casting interface as Tobject will result in a different reference?

Dennis Poon dennis at avidsoft.com.hk
Sat May 27 18:10:58 CEST 2017



Sven Barth via fpc-pascal wrote:
> The idea itself is valid, cause "(IMyInterfaceVar as TObject) as
> IMyInterface = IMyInterfaceVar" is true if and only if IMyInterface is
> a COM interface. If IMyInterface really is a CORBA interface as Dennis
> wrote then the compiler should already have complained at the "aObj :=
> aInt as TObject" line as this type of conversion is*not*  supported by
> CORBA interfaces (cause they don't provide QueryInterface() which is
> needed for this). At least for me the compiler*did*  complain (both
> 3.0.2 and 3.1.1) when I tested this.
> So the question is: is IMyInterface indeed a CORBA interface? If so
> then why does the compiler not complain? If not then why doesn't it
> work? For both cases a full example would be needed to investigate
> this.
>
> Regards,
> Sven
Sorry, I got it wrong. The interface was in fact COM style instead of CORBA.

In case of COM interface, why

var
    aInt : IMyInterface;
   aObj : TObject;
begin
....
....
...
    aInt := MyList.Items[0];

    aObj := aInt as TObject;

why sometimes (not always)   aInt  <>   (aObj as IMyInterface ) ?

Dennis



More information about the fpc-pascal mailing list