× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



On 2012/5/4 7:45 PM, Rory Hewitt wrote:
Um. service programs might not be, but programs are (one call stack above
their PEP entry). Aren't they?


I don't think so, at least not for the purpose of sending messages. Only ILE procedures are on the call stack.

For a cycle-main RPG module, the main procedure gets given the same name as the module when it is created, and if you also use that name for the program, then it could appear as though you were successfully sending a message to the program. But in that case, the *PROC value in the PSDS would also have the name of the main procedure. When you want to send a message to the cycle main, *PROC is more reliable than 334-343 since the name of the main procedure can never change, but the name of the module and program can change after they were compiled.

Here's how I proved it to myself.

I created the RPG module as CALLSTK1, and the CLLE module as CALLSTKMSG (see code below).

===> crtpgm qtemp/callstk1 module(callstk1 callstkmsg) entmod(callstk1)
===> crtpgm qtemp/callstk2 module(callstk1 callstkmsg) entmod(callstk1)

When I call CALLSTK1, it works fine because the RPG main procedure has the same name the program, CALLSTK1.

My call stack at the time of the SNDPGMMSG:
Program Procedure
CALLSTK1 _QRNP_PEP_CALLSTK1
CALLSTK1 CALLSTK1
CALLSTK1 CALLSTKMSG

When I call CALLSTK2, it fails with CPF2479 when trying to send the message, because the program name is CALLSTK2, and that's not the name of any procedure on the stack.

Cause . . . . . : Call stack entry CALLSTK2, specified for the send, receive, move or delete message operation, could not be found in the call stack.

My call stack at the time of the SNDPGMMSG:
Program Procedure
CALLSTK2 _QRNP_PEP_CALLSTK1
CALLSTK2 CALLSTK1
CALLSTK2 CALLSTKMSG

CLLE module CALLSTKMSG
pgm parm(&where)

dcl &where type(*char) len(10)

sndpgmmsg msgid(CPF9898) msgf(qcpfmsg) +
msgtype(*info) +
msgdta('message to ' *BCAT &where) +
topgmq(*same (&where))

RPGLE module CALLSTK1:
D psds sds
D pgm 334 343
D callstkmsg pr
D where 10a const
/free
sndmsg (pgm);
return;

As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 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.