Am 20.12.2019 um 16:17 schrieb Adriaan van Os:
I would like to pass a CORBA interface-type as parameter and test for
equality, So, for example, I have
{$mode objfpc}
{$interfaces corba}
type
IMyInterface = Interface
[ '{34aad6d0-5884-4143-97c2-b6e330305ae3}']
Function MyFunc : Integer;
end;
Now I can pass IMyInterface to TObject.GetInterface as the first
parameter, which is of type TGuid in the declaration.
However, if I use the same TGuid parameter type in my own procedure
procedure TestInterfaceParameter
( const theInterface : TGuid);
begin
if IsEqualGUID
( theInterface, ITestInterface1)
then writeln
( 'theInterface = ITestInterface1')
end;
then I run into the problem that IMyInterface is accepted as actual
parameter of TestInterfaceParameter and of IsEqualGUID only if
IMyInterface inherits from IUnknown (which I certainly don't want, as
it is reference counted). Strangely, TObject.GetInterface does accept
IMyInterface as a parameter. So where is the difference ? Is there
some compiler magic involved in TObject.GetInterface ?
The important difference in this regard between COM and CORBA interfaces
is that for CORBA interfaces the "guid" is a ShortString, not a TGUID.
Thus the compiler allows to convert a CORBA interface to a ShortString.
For TObject.GetInterface this works, because it has a overload for
ShortString. ;) (this is document here:
https://www.freepascal.org/docs-html/current/ref/refse47.html#x100-1220007.6
)
Regards,
Sven
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal