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) |