Dieser Umweg muss gemacht werden, damit sichergestellt wird, das jeder Byte in dem Speicher liegt wo es hingehört.
Dein PChar kommt nämlich aus dem Speicherbereich der
Dll und wird ohnehin dadurch das die Procedure beendet wurde nicht mehr existieren (sprich du greifst mit deinem Code womöglich auf eine Speicherleiche zu).