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 WTFDelphi 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:
This way there's no need of conditional compilation outside Allegro.pas.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;
So, now we know.![]()



Reply With Quote

Bookmarks