Nel codice che hai scritto non fai uso in alcun modo di PChar...non lo hai scritto nemmeno una volta.

L'unica considerazione che si deve fare riguardo alle stringhe è che esse sono memory managed: il "memory manager" di Delphi provvede alla loro allocazione e deallocazione in automatico a seconda delle esigenze e di quello che fa il codice; questo vale per le variabili di tipo string.

Questo tipo di variabili, infatti, è un puntatore ad un'area che contiene i dati relativi alla stringa memorizzati in un formato che comunque non deve essere tenuto in considerazione (cioè non ci si deve basare su di esso poichè potrebbe cambiare ad ogni versione di Delphi). Queste stringhe si possono "castare" a PChar e ci pensa Delphi a tramutarle in stringhe terminate dal carattere nullo per poterle passare ad una DLL di Windows o ad una DLL utente.

Il tipo shortstring è diverso, è solamente un array statico di caratteri, quindi non ha di questi problemi.

In breve, affinchè le stringhe vengano correttamente passate da un'applicazione ad una DLL usando il tipo autogestito string, è necessario includere come prima unit del progetto (clausola "uses" del DPR) "ShareMem", sia nell'applicazione sia nella DLL.

Se si usa shortstring, il problema non si pone (ma le stringhe possono avere al massimo 255 caratteri).