Am 20.09.2011 09:47, schrieb Graeme Geldenhuys:
Because IInterface is designated as a COM-interface and you can't
descend a CORBA-interface from a COM-interface or vice-versa.

This is not what I meant. Just like the compiler has compiler modes, why
can't the {$interfaces corba} change the "mode" of IInterface. The name
also says it's a "generic interface type", so maybe the compiler could
that inject the following

   IInterface = interface
   end;

...overriding (or better, hiding) the old COM declaration of...

   IInterface = IIUnkown


So then in CORBA style interfaces, the following two declarations mean
the same thing (just like they would if I used COM style interfaces)

{$interfaces corba}
...

   ISubject = interface
   end;

   ISubject = interface(IInterface)
   end;


Just like String can mean AnsiString or ShortString, based on a compiler
switch.

1. Changing the meaning of IInterface based on $interfaces is not possible, because IInterface is located in System unit.

2. Hiding IInterface with a CORBA-based base type is a nice idea at the first glance, but you'll get trouble later, because the base object will be defined in the same unit as the derived symbol:

Imagine you have two units where both declare a CORBA-interface without a parent. Then both units will contain a definition of the basetype. Now you have a third unit that uses those two units and defines an interface that derives from one of the two previous interfaces. This interface won't be compatible then with the other one, from which you didn't derive.


So there are only two other possibilities left:
1. Add a new RTL unit that defines a base interface for CORBA and include that if {$interface corba} is encountered. Problem: I don't know whether $interface is a local or unit global switch (someone else needs to answer this).

2. Add a base type with a different name (e.g. ICORBAInterface) in the System unit and use that as base type.

I personally would suggest the latter.

Regards,
Sven
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to