2017-05-26 11:08 GMT+02:00 Michael Van Canneyt <mich...@freepascal.org>: > > > On Fri, 26 May 2017, Dennis wrote: > >> I defined a generic TList<IMyInterface> //CORBA style interface >> >> var >> aInt : IMyInterface; >> aObj : TObject; >> begin >> aInt := MyList.Items[0]; >> aObj := aInt as TObject; >> >> writeln( IntToHex(LongWord(aInt),4)); >> >> writeln( IntToHex(LongWord(aObj),4)); //this will output a different >> Hex value from previous writeln >> >> >> //This is causing a problem to me because I later >> >> MyList.Remove(aObj as IMyInterface);//will fail because it is not the >> same as aInt and thus fail to locate the item to remove >> >> >> Am I missing some fundamental understanding of interface reference? > > > Why do you think the interface and the object are the same ? They are not. > An interface is just a bunch of method pointers, and an object has instance > data associated with it. Hardly the same thing, I would think ?
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 _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal