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

Reply via email to