我正试图在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)