[fpc-pascal] casting interfaces and objects

Graeme Geldenhuys graemeg.lists at gmail.com
Mon May 19 09:16:37 CEST 2008

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.

CORBA interfaces do not include the following methods. These are only 
relevant to COM interfaces.

function QueryInterface(const iid: tguid; out obj): longint; stdcall;
function _AddRef: longint; stdcall;
function _Release: longint; stdcall;

Everybody I know uses COM interfaces, except for one developers - Martin 
from MSEgui project.  FPC defaults to COM style interfaces as well.

   - Graeme -

fpGUI - a cross-platform GUI toolkit using Free Pascal

More information about the fpc-pascal mailing list