¡Hola!
Tratándose de DLLs lo más recomendable es usar PChar, ya que los valores de tipo String (o cadenas largas) llevan contadores de referencias y tienen un tratamiento especial dentro de Delphi.
La conversión de un PChar a String se da de manera implícita cada vez que usas un PChar donde se espera un String. La conversión inversa tan sólo requiere un molde de tipo.
Código Delphi
[-]
Str := UnPChar;
UnPChar := Pointer (Str);
Te recomiendo que declares a la función y sus parámetros como elementos de tipo PChar. Dentro de la función realiza las conversiones que sean necesarias (usando variables auxiliares si lo crees conveniente) para ejecutar la operación en cuestión.
Espero haber orientado un poco.
Saludos.
Al González.