// В идеале для всех интерфейсных функций
лучше как раз PChar и использовать, т.е. он гарантирует, что внутри реализации интерфейсной
функции будут скопированы данные строки, а не просто указатель.
Вот тут прям когнитивный диссонанс, поскольку PChar это и есть указатель. А вот почему в параметрах динамической библиотеки PChar работает как string, а string как PChar - это повод для написания минимального примера и выкладывания на багтрекер FPC.