Wie schon gesagt: Entweder du suchst dir eine Funktion die mit einfachen Pointer + Längenangabe arbeitet oder du wandelst den String nach UTF8 um und hast das Ergebnis dan in einen String.
Deine Hacker-Funktionen werden scheitern wenn dein bisher ausgesuchte Base64-Methode geziehlt ein #$00 als Stop-Byte annimmt.
Schon mal überlegt ob die Zeile
SetLength(ByteArray, Length(UnicodeStr));
richtig ist wenn eine WideString-Character 2 Bytes einnimmt
Windows Vista - Eine neue Erfahrung in Fehlern.