El tema de las cadenas de texto no es tan simple. Te recomiendo que definas tipos de datos nuevos para evitarte problemas. Te paso las definiciones que hice yo para
Allegro.pas:
Código Delphi
[-]
AL_STR = ANSISTRING;
{$IFDEF ISDELPHI2009ANDUP}
AL_STRptr = PAnsiChar;
{$ELSE}
AL_STRptr = PCHAR;
{$ENDIF}
Uso PAnsiChar ya que CHAR, en las versiones modernas de Delphi, es de 2 bytes (UNICODE) no 1 (ASCII). Quizá por eso te sale "sucio", al intentar decodificar una cadena ASCII como UNICODE.
Por otro lado, uso AL_STR cuando es un parámetro y AL_STRptr cuando es una cadena devuelta por una función. El compilador se encarga de las conversiones adecuadas (siempre que no olvides el CDECL o el STDCALL, claro).