VarChar und Char sind unterschiedliche Datentypen.
Solange wir nur mit RPG und entsprechenden Prototypen arbeiten, ist es zumindest bei Input/Only Parametern (CONST / VALUE) egal, ob der übergebene Parameter mit fixer oder variabler Länge definiert ist.

Erfolgt der Aufruf aus CL, funktioniert dieser Mechanismus nicht. D.h. von CL werden die Daten mit fixer Länge übergeben, was im Untergrund bedeutet es wird ein Pointer auf dem Anfang des Feldes übergeben. Solange beide Felder mit fixer Länge definiert sind ist das auch kein Problem.
Wenn jedoch ein Feld mit variabler Länge definiert ist, werden 2 (oder bei großen Feldern) 4 führende (unsichtbare) Bytes in der die variable Länge hinterlegt wird hinzugefügt.
Wird jetzt das Programm aus CL aufgerufen und nur ein Pointer übergeben, zeigt dieser jetzt auf den Anfang des variablen Feldes, also auf das erste der beiden führenden Bytes. Damit werden u.U. nicht numerische Werte übertragen und das Programm macht den Abflug.

Am einfachsten ist es du definierst die Variable LocFile mit variabler Länge lädst den Parameter-Wert um und entfernst dabei die führenden und folgenden Blanks.

Code:
DCL-S  LocFile   VarChar(128);

LocFile = %Trim(Parameter);
Birgitta