Определение не найдено для символа 'QMHSNDPM'

Я следую руководствам Скотта Клемента по программированию IFS с помощью RPGLE. Я сталкиваюсь с нижеперечисленными проблемами. Я также добавил фрагменты кода. Пожалуйста помогите.

Ownership of object WITHERRH in QTEMP type *MODULE changed.            
*SRVPGM object QZDMMDTA in library QSOC not found.                     
Definition not found for symbol 'QMHSNDPM'.                            
Definition not found for symbol 'QMHSNDPM'.                            
Program WITHERRH in library ABCLIBL not created.     

PR были определены внутри этого источника копирования.

 /if not defined(ERRNO_H)                                          
D strerror        PR              *   extproc('strerror')          
D  errnum                       10I 0 value                        
 /define ERRNO_H                                                   
 /endif                                                            

 /if defined(ERRNO_LOAD_PROCEDURE)                                 
P die             B                                                
D die             PI              N                                
D  msg                         256A   const                        

D QMHSNDPM        PR                  extproc('QMHSNDPM')          
D  messageId                     7A   const                        
D  qualMsgF                     20A   const                        
D  msgData                     256A   const                        
D  msgDataLen                   10I 0 const                        
D  msgType                      10A   const                  
D  callSktEnt                   10A   const                  
D  callSktCnt                   10I 0 const                  
D  messageKey                    4A                          
D  errorCode                   256A                          

D dsEC            DS                                         
D  dsECBytesP             1      4I 0 inz(%size(dsEC))       
D  dsECBytesA             5      8I 0 inz(0)                 
D  dsECMsgId              9     15                           
D  dsECReserv            16     16                           
D  dsECMsgData           17    256                           
D msgLen          S             10I 0                        
D theKey          S              4A                          

       msgLen = %checkr(msg:' ');                            
       if msgLen < 1;                                        
          return *off;                                         
       endif;                                                  

       callP  QMHSNDPM('CPF9897':'QCPFMSG   *LIBL':msg:msgLen: 
                       '*ESCAPE':'*':3:theKey:dsEC);           
       return *off;                                            
P                 E                                            

В основную программу добавлен каталог привязки QC2LE; процедура «умереть» вызывается, как показано ниже,

H dftactgrp(*no) actgrp(*new) bnddir('QC2LE')    

D/copy ABCLIBL/QIFSSRC,IFSIO_H                 
D/copy ABCLIBL/QIFSSRC,ERRNO_H               
.....
if write(fd:%addr(wrdata):%size(wrdata)) < 1; 
   errMsg = %str(strerror(errno));            
   callP close(fd);                           
   callP die('open(): ' + errMsg);            
endif;                                        

person Sekar    schedule 10.09.2016    source источник
comment
QMHSNDPM не является extproc(). Это extpgm().   -  person user2338816    schedule 11.09.2016
comment
Это исправило это. Спасибо   -  person Sekar    schedule 17.09.2016


Ответы (1)


Как сказал @ user2338816, QMHSNDPM - это внешняя программа, а не процедура:

D QMHSNDPM        PR                  extpgm('QMHSNDPM')

Большинство API являются внешними программами, а не процедурами. И когда они не являются внешними программами, это легко увидеть из документации.

Например: Переменные модуля дампа

С помощью этого API вы привязываете свою программу к сервисной программе QTEDMPV, а затем используете extproc для ссылки на процедуру.

D DumpVariables   PR                  extproc('QteDumpModuleVariables')
person Adrian Bannister    schedule 12.09.2016