|
Nope, the procedure has to match what was exported with the EXPORT keyword,
or rather ExtProc in RPG IV.
So if you code:
0001.00 D GetSocSec PR 9P 0 Extproc('GetSocSec')
When you're compiling the module that has the implementation of GetSocSec,
then the compiler will export the GETSOCSEC procedure as "GetSocSec" (mixed
case). Therefore the EXPORT in the binder source must specify the
"GetSocSec" name or it will not find it in the module and you'll get a
binder error.
Originally, the EXPORT keyword on the P spec was supposed to be used to
provide the exported name for the procedure. If not specified, it was to
default to the name on the P spec (in upper case). For some screwy reason,
the ExtProc keyword on the prototype was used instead. So this is yet
another reason to always store your prototypes in /COPY members and /COPY or
/INCLUDE them rather than hard coding them!
-Bob Cozzi
-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-bounces@xxxxxxxxxxxx]
On Behalf Of Holden Tommy
Sent: Wednesday, October 13, 2004 9:18 AM
To: 'RPG programming on the AS400 / iSeries'
Subject: RE: Trying to use my procedure from a pgm complied with CRTBNDRPG
could be wrong but I thought that the EXPORT SYMBOL() the procedure had to
be in all caps???
Thanks,
Tommy Holden
-----Original Message-----
From: Brenzel, Wendy [mailto:bmis06@xxxxxxxxxxxxxxxxxxxxx]
Sent: Wednesday, October 13, 2004 9:10 AM
To: 'RPG programming on the AS400 / iSeries'
Subject: RE: Trying to use my procedure from a pgm complied with
CRTBNDRPG
I got this from DSPSRVPGM...
Display Service Program Information
Display 5 of
10
Service program . . . . . . . . . . . . : IDSERV
Library . . . . . . . . . . . . . . . : MARYWOOD
Owner . . . . . . . . . . . . . . . . . : QPGMR
Service program attribute . . . . . . . : RPGLE
Detail . . . . . . . . . . . . . . . . . : *PROCEXP
Procedure Exports:
Procedure Name
ARGOPT
GETSOCSEC *NO
And I already had this...
*************** Beginning of data
*************************************
0001.00 STRPGMEXP PGMLVL(*CURRENT)
0002.00 EXPORT SYMBOL(GetSocSec)
0003.00 ENDPGMEXP
****************** End of data
****************************************
I have been trying several variations on the theme & have been deleting &
recreating the service program after recreating the module for GEetSocSec...
It is the only module associated with the sevice program so far, because I
was trying to get this one to work first :) Then I tied the service program
to the binding directory...
Display Binding Directory
Binding Directory: IDDIR Library: MARYWOOD
--------Creation---------
Object Type Library Date Time
IDSERV *SRVPGM MARYWOOD 10/12/04 15:58:51
-----Original Message-----
From: Bob Cozzi [mailto:cozzi@xxxxxxxxx]
Sent: Wednesday, October 13, 2004 9:54 AM
To: 'RPG programming on the AS400 / iSeries'
Subject: RE: Trying to use my procedure from a pgm complied with
CRTBNDRPG
This is a binding error.
Do you have this...
0001.00 D GetSocSec PR 9P 0 Extproc('GetSocSec')
Properly specified when the service program was created? When the module for
the service program was created? Is GetSocSec exported from the service
program? Do a DSPSRVPGM to see if the procedure is exported. I'm guessing it
is either not exported, or is exported as GETSOCSEC. To export it, use
EXPORT(*ALL) or better yet, create some binder source and add this line to
it:
EXPORT SYMBOL("GetSocSec")
-Bob Cozzi
-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-bounces@xxxxxxxxxxxx]
On Behalf Of Brenzel, Wendy
Sent: Wednesday, October 13, 2004 7:55 AM
To: 'rpg400-l@xxxxxxxxxxxx'
Subject: Trying to use my procedure from a pgm complied with CRTBNDRPG
I am missing the boat... Please help. I am trying to compile an rpg ile test
program, using crtbndrpg, which calls a procedure. The procedure is
compiled into a module, placed in a service program, which in turn is in a
binding directory. The test program
Compile message:
E x t e r n a l R e f e r e n c e s
Statically bound procedures:
Procedure References
GetSocSec 10 44
Imported fields:
Field Attributes Defined
No references in the source.
Exported fields:
Field Attributes Defined
No references in the source.
Message Totals:
Information (00) . . . . . . . : 2
Warning (10) . . . . . . . : 0
Error (20) . . . . . . . : 0
Severe Error (30+) . . . . . . : 0
--------------------------------- -------
Total . . . . . . . . . . . . . : 2
Source Totals:
Records . . . . . . . . . . . . : 46
Specifications . . . . . . . . : 25
Data records . . . . . . . . . : 0
Comments . . . . . . . . . . . : 18
* * * * * E N D O F F I N A L S U M M A R Y * * * * *
B i n d D i a g n o s t i c M e s s a g e s
Errors were found during the binding step. See the job log for more
information
* * * * * E N D O F B I N D D I A G N O S T I C M E S S A G E S
Job log...
30 10/12/04 16:00:16.810368 QBNBIND QSYS *STMT QBNBIND
From module . . . . . . . . : QBNBSYMR
From procedure . . . . . . : QBNBSYMR__UnresolvedReferenceIterator
Statement . . . . . . . . . : 31
To module . . . . . . . . . : QBNBSYMR
To procedure . . . . . . . : QBNBSYMR__SignalUnresolvedReferences
Statement . . . . . . . . . : 8
Message . . . . : Definition not found for symbol 'GetSocSec'.
Cause . . . . . : No definition was found for reference GetSocSec in
*MODU
object WTESTPROC in library QTEMP. The definition either does not exist
or
is not of the same data or procedure type as the reference. Recovery .
.
: Try the Create Program (CRTPGM) command again, supplying an object
tha
contains a definition for symbol GetSocSec.
This procedure receives an id number & sends back soc sec....
I'm missing d spec I think in the test call program....
Test Program...
D Spec...
/Copy mwdgpl/qrpglesrc,protoid
Protoid...
*************** Beginning of data
*************************************
0001.00 D GetSocSec PR 9P 0 Extproc('GetSocSec')
0002.00 D InIDNo 9P 0 Value
****************** End of data
****************************************
c******************************************
C* Call the procedure
c******************************************
c getit begsr
/Free
socsec=GetSocSec(id#);
/End-Free
c endsr
...Where id# & socsec are defined as 9p 0
Procedure...
FMWDPUNIQ IF E K DISK
D*
D GetSocSec PR 9P 0
D InIDNo 9P 0 Value
D* Status Data Structure
D STATUS SDS 333
P**************************************************
P* Procedure -GetSocSec
P**************************************************
P GetSocSec B Export
D* Procedure Interface...
D PI 9P 0
D InIDNo 9P 0 Value
D* Local variables
D SocSec S 9P 0
C* Housekeeping
C Clear SocSec
C* Retrieve Soc Sec from Unique File...
C *in87 doueq '0'
C InIDNo chain jxrcd 8887
C *in87 ifeq '1'
C call 'LOCKMSG'
C parm STATUS
C end
C end
C *in88 ifeq '0'
C z-add jxssn SocSec
C end
C*
C Return SocSec
P GetSocSec E
****************** End of data **************************************
I am compiling with CRTBNDRPG command, DFTACTGRP *NO &
BNDDIR(IDDIR)...(Which contains my service program, which contains my
procedure module.) Any suggestions?
Wendy Brenzel
Senior Programmer/Analyst
MIS Department
Marywood University
Scranton, PA 18509
(570) 348-6221 ex2568
--
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.
--
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.
--
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.
--
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.