UnicodeProblem:
Ja, erstmal ist "String" (nicht der
Typ "String[123]") seit Delphi 2009 ein Alias für einen UnicodeString und vorher war er es für AnsiString.
Aber der Typ "String[123]" ist und war immer
ANSI.
Was bedeutet
Ansistring;{STRING[255];}
?
Es was mal String[255] und ist jetzt AnsiString?
String/AnsiString/UnicodeString sind "LongStrings", was "intern" ein Zeiger auf einen String ist,
also im Record oder den Parametern mit diesem Typen ist immer nur ein "Pointer" drin.
Beim
Typen String[123] ist es aber ein "ShortString", was "intern" ein Record/StatischesArray ist, also da wo dieser Typ drin ist, dort sind die Chars direkt drin.
(und ich wette, es war beim Record TFlrKopf und den Parametern, für die DLL-Schnittstelle, auch absichtlich so)
PS: statt
if StringIstLeer(HStr) then
kann man auch
if Trim(HStr) = '' then
verwenden
und statt
if Pos(...) = 1 then
würde ich heutzutage eher
StartsStr empfehlen.