Sorry for the double post, but I have to say this: the solution was trivial
While testing I discovered that function StrPas (used internally to force some callings to overloaded functions in my abstraction layer unit) were in a different unit in modern Delphi (AnsisString instead of SysUtils), so I added it to be used only in Delphi. Since then warnings appeared again and I was like WTF Delphi is trolling me... But using the Find declaration command to see the actual declaration of Format I discovered AnsiString also defines it's own version using ANSISTRING instead of UNICODESTRING!
Note it doesn't avoid the need of the abstraction layer unit, but it simplifies a lot the implementation of this unit (and avoids to call an extra function internally in other units). For example:
Code:
USES
{$IFDEF ISDELPHI2009ANDUP}
{ This unit implements sysutils using ANSISTRING instead of UNICODESTRING,
which is the default in modern Delphi compilers. }
AnsiStrings;
{$ELSE}
sysutils;
{$ENDIF}
···
FUNCTION al_str_format (CONST Fmt: AL_STR; CONST Args : ARRAY OF CONST)
: AL_STR;
BEGIN
Format (Fmt, Args)
END;
This way there's no need of conditional compilation outside Allegro.pas.
So, now we know.
Bookmarks