将C原型转换为RPG



我正试图在RPG中使用QsyFindFirstValidationLstEntry,然而,尽管我确信验证列表的存在,我还是收到了错误3025,根据文档,这意味着";找不到验证列表对象"我唯一能想到的是,在如何传递限定名方面存在问题。

根据文件:

int QsyFindFirstValidationLstEntry
(Qsy_Qual_Name_T        *Validation_Lst,
Qsy_Rtn_Vld_Lst_Ent_T  *First_Entry);

其中

Validation_Lst(输入(

指向验证列表的限定对象名称的指针,用于查找中的第一个条目。前10个字符指定验证列表名称,后10个字符则指定库。

这是我从RPG:调用它的尝试

H option(*srcstmt: *nodebugio)
H DFTACTGRP(*NO)
/COPY QSYSINC/QRPGLESRC,QUSEC
/COPY QSYSINC/QRPGLESRC,QSYVLDL

/free
DCL-PR FindFstValLstEn INT(10) 
EXTPROC('QsyFindFirstValidationLstEntry');
QualName    pointer const options(*STRING);
Entry       pointer;
END-PR;

DCL-PR errno pointer EXTPROC('__errno');
END-PR;
DCL-DS FirstEntry LikeDS(QSYRVLE) based(fe_ptr);
dcl-s fe_ptr pointer;
DCL-S result INT(10);

dcl-s errno_val INT(10) based(errno_ptr);
dcl-s errno_ptr pointer;
//                         "WEBUSRS   WEBLIB    "
dcl-s vldl varchar(20) inz('USERPRF   QUSRSYS   ');
result = FindFstValLstEn(vldl:fe_ptr);

if (result<>0);
errno_ptr = errno;
dsply errno_val;
endif;

*InLR=*On;
/end-free

正如我所说,这给了我错误代码3025,即使验证列表QUSRSYS/USRPRF存在,并且我能够使用QSYOLVLE API读取它。

需要记住的是,默认情况下,RPG通过引用传递参数;又称指针。。。

你的原型应该有最基本的,只有几个CHAR((参数,

dcl-pr QsyFindFirstValidationLstEntry extproc('QsyFindFirstValidationLstEntry');
list char(20) const;
entry char(2000);  // doesn't matter how big, just has to be bigger than needed
end-pr;

为了便于使用,你可以(应该(分解parms

dcl-ds validationList_t qualified template;
name char(10);
library char(10);
end-ds;  
dcl-ds validationListEntry_t qualified template;
dcl-ds entryIdInfo;
length int(10);
ccsid  uns(10);
id     char(100);
end-ds;
dcl-ds entryEncrDataInfo;
length int(10);
ccsid  uns(10);
data   char(600);
end-ds;
dcl-ds entryDataInfo;
length  int(10);
ccsid   uns(10);
data    char(1000);
end-ds;
*n char(4);  // reserved
moreInfoPtr pointer;
end-ds;

dcl-pr QsyFindFirstValidationLstEntry extproc('QsyFindFirstValidationLstEntry');
list likeds(validationList_t) const;
entry likeds(validationListEntry_t);
end-pr;
dcl-ds vldl likeds(validationList_t);
dcl-ds entry likeds(validationListEntry_t);
vldl.library = 'QUSRSYS';
vldl.name = 'USRPRF';
QsyFindFirstValidationLstEntry(vldl:entry);

以下是RPG咖啡馆中关于将C原型转换为RPG的教程。https://ibm.biz/Convert_C_Prototypes_To_RPG(实际URL为https://www.ibm.com/support/pages/node/1117461)

相关内容

  • 没有找到相关文章

最新更新