|
Paul,
if your procedures are in a service program you can dynamically call with
QZRUCLSP Api that also allows you to use variable parameters and get return
values.
Example:
QZRUCLSP(SrvPgm+SrvPgmLib:%trimr(Procedure)+x'00':
RETTYPE_NONE:PARMTYPE_PTR:1:ApiError:
RtnVal:Parameter1);
----- Original Message -----
From: "Hauser, Birgitta" <Birgitta.Hauser@xxxxxxxxxxx>
To: <rpg400-l@xxxxxxxxxxxx>
Sent: Tuesday, May 24, 2005 1:25 PM
Subject: RE: Variable Modules
> Hi Paul,
>
> to call modules oder better procedures dynamically, you have to use
> prototyping and procedure pointers.
> In contrary to programs that are called dynamically, that means they
aren't
> activated before the CALL statement is executed, the procedures must exist
> at compile time. The module object that contains the procedures or the
> signature of the service program where the module is bound to are
physically
> embedded into the program object.
>
> Here an example:
> I have three procedures that convert a date into a character
representation.
>
> The first procedure converts to *EUR format, the second to *USA-Format and
> the third to *JIS-Format.
> You will see the prototypes for these functions
> D CvtDateToEur PR 10A extproc('CVTDATEUR')
>
> D ParmDate D const options(*NoPass)
>
> D CvtDateToUSA PR 10A extproc('CVTDATUSA')
>
> D ParmDate D const options(*NoPass)
>
> D CvtDateToJIS PR 10A extproc('CVTDATJIS)
>
> D ParmDate D const options(*NoPass)
>
> Here are the functions:
> ************************************************************
> * Converte Date into European Format
> ************************************************************
> P CvtDateToEur B Export
> D CvtDateToEur PI 10A
> D ParmDate D const options(*NoPass)
> *-----------------------------------------------------------
> /Free
> If %Parms >= 1;
> Return %Char(ParmDate: *Eur);
> else;
> Return %Char(%Date(): *Eur);
> EndIf;
> /End-Free
> P CvtDateToEur E
> ************************************************************
> * Convert Date into USA Format
> ************************************************************
> P CvtDateToUSA B Export
> D CvtDateToUSA PI 10A
> D ParmDate D const options(*NoPass)
> *----------------------------------------------------------------
> /Free
> If %Parms >= 1;
> Return %Char(ParmDate: *USA);
> else;
> Return %Char(%Date(): *USA);
> EndIf;
> /End-Free
> P CvtDateToUSA E
> *****************************************************************
> * Convert Date into Japanese Format
> *****************************************************************
> P CvtDateToJIS B Export
> D CvtDateToJIS PI 10A
> D ParmDate D const options(*NoPass)
> *----------------------------------------------------------------
> /Free
> If %Parms >= 1;
> Return %Char(ParmDate: *JIS);
> else;
> Return %Char(%Date(): *JIS);
> EndIf;
> /End-Free
> P CvtDateToJIS E
>
> Depending on the language or country you want to call one of these
> functions.
> To do this you need an additional prototype. Add the Keyword EXTPROC and
> specify a procedure pointer variable instead of a procedure name.
> A procedure pointer has the data type * and the key word PROCPTR.
> The following example shows you the additional prototype and the
definition
> of the procedure pointer variable:
>
> D CvtDate PR 10A ExtProc(MyProcPtr)
> D ParmDate D const options(*NoPass)
>
> D MyProcPtr S * ProcPtr
>
> This prototype and procedure pointer must be embedded in the source where
> you want to calle the functions "dynamically".
> The next example shows you how to call these functions.
> D ConstProcUSA C const(%PAddr('CVTDATUSA'))
>
> D ConstProcJIS S * ProcPtr inz(%PAddr('CVTDATJIS'))
>
> /Free
> Select;
> When Country = 'DE ';
> MyProcPtr = %PAddr('CVTDATEUR');
> When Country = 'USA';
> MyProcPtr = ConstProcUSA;
> When Country = 'JPN';
> MyProcPtr = ConstProcJIS;
> EndSL;
>
> MyCharDate = CvtDate(MyDate);
> /End-Free
>
> I hope this helps!
>
> Birgitta
>
> Mit freundlichen Grüßen
>
> i.A. Birgitta Hauser
>
> LUNZER + PARTNER GMBH
> Unternehmensberatung
> Carl-Zeiss-Straße 1
> 63755 Alzenau
>
> Tel: + 49 6023 951-255
> Fax: + 49 6023 951-111
> Internet. www.lp-gmbh.com
> www.rpg-schulung.de
>
>
> --
> This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing list
> To post a message email: RPG400-L@xxxxxxxxxxxx
> To subscribe, unsubscribe, or change list options,
> visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
> or email: RPG400-L-request@xxxxxxxxxxxx
> Before posting, please take a moment to review the archives
> at http://archive.midrange.com/rpg400-l.
>
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.