找不到符号'QMHSNDPM'的定义

时间:2016-09-10 07:17:31

标签: rpgle

我正在关注Scott Klement关于使用RPGLE进行IFS编程的教程。我正面临以下问题。我也添加了代码片段。请协助。

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绑定目录; “die”程序的调用如下,

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;                                        

1 个答案:

答案 0 :(得分:1)

正如@ user2338816所说,QMHSNDPM是一个外部程序而不是程序:

D QMHSNDPM        PR                  extpgm('QMHSNDPM')

大多数API都是外部程序而不是程序。当它们不是外部程序时,从文档中很容易看出。

例如:Dump Module Variables

使用此API,您可以将程序绑定到QTEDMPV服务程序,然后使用extproc来引用该过程。

D DumpVariables   PR                  extproc('QteDumpModuleVariables')