Am 21.12.2019 um 16:12 schrieb Adriaan van Os:
Sven Barth via fpc-pascal wrote:
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
Thanks, I hadn't seen that. Yes, this solves the problem. And this
clarifies that the CORBA interface-identifying string doesn't need to
be in GUID form, it can be something as simple as [ 'IMyInterface' ].
I will note that the interface-identifier comparison below (in
procedure TestInterfaceParameter) doesn't work without the explicit
typecast from interface-identifier to "shortstring". Apparently, that
typecast is implicit when passing an interface-identifier as actual
parameter to a "shortstring" formal parameter.
type
InterfaceType = string[ 255];
procedure TestInterfaceParameter
( const theInterface : InterfaceType);
begin
if theInterface = InterfaceType( ITestInterface1)
then writeln
( 'theInterface = ITestInterface1')
end;
begin
TestInterfaceParameter
( ITestInterface1)
end.
That is because the compiler only implements the *assignment* of an
interface to a ShortString (or TGUID for COM interfaces), not the
comparison.
Regards,
Sven
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal