[fpc-pascal] casting interfaces and objects

Martin Schreiber fpmse at bluewin.ch
Mon May 19 15:37:46 CEST 2008


On Monday 19 May 2008 00.02:55 Marc Santhoff wrote:
> Am Sonntag, den 18.05.2008, 23:41 +0200 schrieb Graeme Geldenhuys:
> > 2008/5/18 Marc Santhoff <M.Santhoff at t-online.de>:
> > > Since the compiler dod not warn about using the "as" operator I assume
> > > it is safe? Like this:
> > >
> > > procedure TObservable.DeRegister( obsv: IObserver );
> > > var
> > >        i: integer;
> > > begin
> > >        if (fObservers.count<=0) then exit;
> > >        for i:=0 to fObservers.count-1 do begin
> > >                if ((fObservers[i] as IObserver)=obsv) then begin
> >
> > I'm not a big Interfaces expert, but as for as I know using 'as' like
> > that with Interfaces actually translates to a QueryInterface() call
> > internally, which is why it is allowed.  I vaguely remember as issue
> > between CORBA and COM interfaces and the 'as' call, because CORBA
> > interfaces do not have a QueryInterface() implementation. Well,
> > something like that... :-)
>
> Okay, so there are still some unknowns.
>
TObject.GetInterface does not work with corba style interfaces:
http://bugs.freepascal.org/view.php?id=5800
http://bugs.freepascal.org/view.php?id=6798
http://bugs.freepascal.org/view.php?id=6036

For a workaround use "getcorbainterface" in lib/common/kernel/mseclasses.pas 
from MSEide+MSEgui:

http://sourceforge.net/projects/mseide-msegui/


Martin



More information about the fpc-pascal mailing list