Es legt die sogenannte Aufrufkonvention fest. Die Aufrufkonvention sagt u.A., wie die Funktion ihre Parameter erwartet - auf dem Stack oder in Registern - und in welcher Reihenfolge. Die
DLL-Funktion hat offensichtlich die Aufrufkonvention stdcall, erwartet ihren Parameter also auf dem Stack. Du hast jedoch keine Aufrufkonvention angegeben, dadurch hat Delphi angenommen, dass es sich um die Delphi-eigene Konvention Register handelt. Das bedeutet, dass die ersten drei Parameter in Registern übergeben werden. Du hast der Funktion ihren Parameter also in einem Register gegeben, die Funktion hat aber auf dem Stack nachgeschaut. Dass das nicht klappen kann, sollte klar sein.