Personalmente la segunda función la haría de la siguiente manera:
Código Delphi
[-]
procedure AnsiToUnicode(Text, Filename: string);
var
WStr: WideString;
F: File;
Escritos: Integer;
begin
WStr:= #$FEFF + Text;
AssignFile(F, Filename);
{$I-}
Rewrite(F,Sizeof(WideChar));
{$I+}
if IOResult = 0 then
begin
BlockWrite(F,PWChar(WStr)^,Length(WStr),Escritos);
CloseFile(F);
end;
end;
En cuanto a tu función, ¿cual es exactamente el fallo que te da?