Das liegt daran, wie dynamische Array's in Delphi verwaltet werden. Dazu gab es hier schön öfter was. Ein dynamisches Array ist ein Pointer auf einen Speicherbereich, bei dem die ersten vier Bytes die Länge darstellen und danach die einzelnen Elemente (in deinem Fall viele PChars). übergibts du jetzt ein dynamisches Array als var Paramater dann wird quasi ein Zeiger auf einen Zeiger übergeben.
Wenn du kompatibel zu anderen Programmiersprachen sein möchtest musst du auf Strings und dynamische Arrays verzichten.
Du könntest allerdings ein statisches Array daraus machen und nur die Adresse übergeben
Delphi-Quellcode:
type
PPCHarArray = ^TPCharArray;
TPCharArray = Array[0..65535] of PChar;
MyExportedFunction( Param1 : INTEGER; Params : PPCharArray)
Dann sollte man entweder mit Params^[0] oder Params[0] (weiss jetzt nicht was funktioniert) auf die Elemente zugreifen können. Allerdings brauchst du dann noch einen Paramater um die Elementanzahl zu übergeben.
Ob es generell mit PChars korrekt klappt kann ich jetzt nicht versprechen.