Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1291851
  • 博文数量: 287
  • 博客积分: 11000
  • 博客等级: 上将
  • 技术积分: 3833
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-16 08:43
文章分类
文章存档

2013年(15)

2012年(17)

2011年(17)

2010年(135)

2009年(85)

2008年(18)

分类: 系统运维

2009-10-02 14:50:37

RPGIV编程问题百解(32)调用procedure出错,procedure参数传入问题和检验
 
    一个procedure的prototype定义多个参数。在调用这个procedure时,系统返回错误信息"Pointer not set for location referenced"。
 
    通常情况下,我们都理所当然地相信,每个procedure被调用时,每个参数都有值。所以我们在编程时,往往忽略了对这些procedure参数传入点的检验。所以对多参数procedure调用时,如下列代码,如果一个参数或多个参数没有传入,系统就会返回“Pointer not set for location referenced”。
 
If        RetrieveJobInformationFailed
            (JobI0100                
            :%Size(JobI0100))        
 
Here's the prototype:
 
D RetrieveJobInformationFailed... 
D                 PR             1n
D ReceiverVariable...                                                  
D                            32766a   Options(*VarSize)                
D ReceiverVariableLength...                                            
D                               10i 0 Const                            
D ErrorDetail...                                                       
D                                     Like(ErrC0100)                   
D                                     Options(*NoPass:*Omit)           
D FormatName...                                                        
D                                8a   Const                            
D                                     Options(*NoPass:*Omit)           
D QualifiedJobName...                                                  
D                               26a   Const                            
D                                     Options(*NoPass:*Omit)           
D InternalJobId...                                                     
D                               16a   Const                            
D                                     Options(*NoPass:*Omit)           
D ErrorMessageText...                                                  
D                              256a   Options(*NoPass:*Omit:*VarSize)
 
对上面procedure的参数代码,我们可以在程序中进一步对接入点的检查,例如:
 
if %Parms >=3 and %Addr(ErrorDetail) <> *NULL;
 // use parm3 value
else;
 //返回信息,或根据需要排除null值处理。
endif;
 
if %Parms >=4 and %Addr(FormatName) <> *NULL;
 // use parm4 value
else;
 //返回信息,或根据需要排除null值处理。
endif;
 
即排除每个参数中,有*null值,没有接入点。
 
阅读(1669) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~