UDFs können keine Ein/Ausgabe Parameter handeln, sondern nur Eingabe-Parameter. Das Ergebnis wird immer über dien Rückgabe-Wert ausgegeben.
Du musst also Dein Programm so modifizieren, dass es der erwarteten Struktur entspricht.

Am einfachsten ist es Du wrappst Dein Original-Programm,
d.h. Du generierst eine RPG-Funktion (in einem Service-Programm), in der Dein eigentliches RPG-Programm aufgerufen wird. Die Funktion gibt dann das Ergebnis bzw. Deinen Ein/Ausgabe-Parameter über RETURN aus.

Diese Funktion wird dann im CREATE FUNCTION angegeben.

Etwa so:
Code:
  Ctl-Opt NoMain;

  DCL-Proc YourFunction   Export; 
     DCL-PI *N   Char(163);
       YourPar   Char(163);
     End-PI;
     CallP YourPGM(YourPar);
     Return YourPar;
  End-Proc;
Ich meine es wäre auch möglich ein Programm zu generieren mit 2 Parametern, der erste ist Dein normaler Ein/Ausgabe-Parameter und der zweite ist der Ausgabe-Parameter.
Dieses Programm ruft dann Dein Original-Programm auf.
Diese Klimmzüge musste man machen, bevor man Funktionen handeln konnte (also schon Jahrhunderte zurück und seither habe ich es nicht mehr probiert).
Die bessere Lösung ist allerdings eine zusätzliche Funktion.

Was den Parameter Style angeht:
Bei GENERAL werden nur die Parameter übergeben, die auch im RPG definiert sind.
Bei allen anderen Styles noch einige Parameter mehr. Das ist kein Problem, solange diese Parameter im RPG-Programm nicht angesprochen werden.
(Wie früher bei Entry-PLISTs, da was es auch kein Problem, wenn nicht alle Parameter übergeben wurden, solange die Parameter, die nicht übergeben wurden, nicht angesprochen wurden)