[fpc-devel] {$Interfaces Corba} and TInterfacedObject
Joao Morais
post at joaomorais.com.br
Thu Nov 29 11:24:43 CET 2007
Graeme Geldenhuys wrote:
> So what do I use to create interfaces and classes that implement interfaces?
> Which declaration style do I use? Or doesn't it make a difference?
>
> type
> ICommand = interface(IInterface)
> vs
> ICommand = interface(IUnkown)
They are exactly the same ? (D<=5 and D>=6 compatibility)
> ICommand = interface
Under $interfaces com, interface = interface(iunknown)
> Now for created classes that implement those interfaces. What base
> object do I use?
>
> type
> TCommandClass = class(TInterfacedObject, ICommand)
> vs
> TCommandClass = class(TSomeCustomNonReferenceCountedClass, ICommand)
I am using my own classes that implement _addref, _release and QueryIntf
and am very happy with them. I do use refcounting where I want
(everywhere btw) and don't destroy the instance where I don't want.
You will want to use TInterfacedObject class if you:
1. Want refcounting;
2. Don't want to destroy the instance if the refcount <> 0 (the object
will raise an exception);
3. Don't need to descend from another class.
4. Will take care with circular references.
Otherwise you will need to create your own class and:
1. implement _addref, _release and QueryIntf if using com interfaces;
2. do nothing if using corba interfaces (I have no idea how an interface
is "queried" here).
> I can't imagine that usig Corba style interfaces that I'm allowed to
> use TInterfacedObject as a based class, because TInterfacedObject
> implements reference counting. Is there some other base class I'm
> supposed to use with Corba style interfaces?
Any class. Afaik corba interfaces doesn't implement a method ?
> Does FPC have a Non-Reference counted base class already? It's quite
> simple to implement you own, but is stupid if FPC doesn't already have
> one.
Err... a class doesn't have refcount, just start with TObject or a
descendant.
> Also, do I have to specify {$Interfaces Corba} in every unit I have,
> or is it only needed in the using that defines the interface itself?
You need. See eg MSE units.
> Basically, is that compiler setting unit based or project (global)
> based. Why I ask, is because {$mode xxx} is unit based, not global
> across my whole project. So can I mix Reference counted and
> Non-Reference counted interface styles in the same project?
Any compiler directive is unit based. The unit where you declared the
interface is what will count here.
> I found find any help referencing these issues.... The help topics on
> interfaces and $Interfaces styles are very vague.
Not vague, they was straight to the point imo.
--
Joao Morais
More information about the fpc-devel
mailing list