Hello FPC,

In fpc 2.5.1 trunk today the QueryInterface in rtl\inc\objpash.inc is
defined as:

IUnknown = interface
  ['{00000000-0000-0000-C000-000000000046}']
  function QueryInterface({$IFDEF FPC_HAS_CONSTREF}constref{$ELSE}const{$ENDIF} 
iid : tguid;out obj) : longint;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
  function _AddRef : longint;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
  function _Release : longint;{$IFNDEF WINDOWS}cdecl{$ELSE}stdcall{$ENDIF};
end;
IInterface = IUnknown;

Which after the resolved ifdefs it is compiled in Windows as:

IUnknown = interface
  ['{00000000-0000-0000-C000-000000000046}']
  function QueryInterface(constref iid : tguid;out obj) : longint; stdcall;
  function _AddRef : longint; stdcall;
  function _Release : longint; stdcall;
end;
IInterface = IUnknown;

Which breaks the compilation of source code like Zeos which expect the
"iid: tguid" to be const, not constref.

I'm aware about the changes done to be XPCOM compatible, but at the
price of "breaking" all existing COM code ? OK, the break is quite
easy to solve, just replace const by contref, but the question is...
Is needed to change it to constref in Windows platform too ?

I know Joost do the changes, but I think direct email is not a good
choice unless no answer in list of course.

-- 
Best regards,
 José

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to