Das Problem ist da eher wohl, dass du die Position des Parameters "Specific Name" feststellen musst.

Die Frage ist eher, sind tatsächlich die Anzahl Paramter unterschiedlich oder nur die Ausprägung.

Bei variablen Parametern musst du Pseudo-Variablen definieren und in Abhängigkeit der Funktion die Adressen der Parameter umsetzen:

d MyInterface pi
d P1 1
D P2 1
:
:

d P$FirmaPtr *
D P$Firma 3 based(P$FirmaPtr)

P$FirmaPtr = %addr(P1);

Allerdings würde ich die Lösung einfacher gestalten:

Je Funktion ein Aufruf einer Service-Routine, die wiederum die tatsächlich Funktion mit konkreten Parametern (ggf. castings) aufruft.

Alles andere versteht ja fast keiner.