免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5355 | 回复: 11

带bnddir的程序编译失败 [复制链接]

论坛徽章:
0
发表于 2010-11-17 16:30 |显示全部楼层
本帖最后由 pantierui 于 2010-11-17 19:21 编辑

我在编译一个RPGLE程序的时候,bnddir的时候出错了。出错信息如下:
Definition supplied multiple times for symbol 'sendmsg'.
Message . . . . :   Definition supplied multiple times for symbol 'sendmsg'.  
Cause . . . . . :   Definition sendmsg was found to be exported from both     
  *MODULE object CMNFUNC in library *LIBL and *SRVPGM object QSOSRV1 in   
  library QSYS.                                                               
Recovery  . . . :   Try the Create Program (CRTPGM) or Create Service Program
  (CRTSRVPGM) command again, supplying only one of these objects, or try the  
  CRTPGM or CRTSRVPGM command again, specifying one or both of OPTION(*DUPVAR)
  and OPTION(*DUPPROC).                                                      
                                                                              
可是我改不了QSYS/QSOSRV1的属性。而CMNFUNC是个MODULE。
那位遇到过这类问题。帮忙解决一下。谢谢。

论坛徽章:
0
发表于 2010-11-17 19:01 |显示全部楼层
本帖最后由 passthru 于 2010-11-17 19:05 编辑

"Message . . . . :   Definition supplied multiple times for symbol 'sendmsg'. "

重复定义了。

我估计,你的CMNFUNC 中的sendmsg,*module,与系统的QSOSRV1 *srvpgm下的sendmsg,*module同名了。

可以这样查看:wrksrvpgm QSOSRV1,查看是否有sendmsg名的module。如果有的话,把你的sendmsg改另外一个名字,再试试。

论坛徽章:
0
发表于 2010-11-17 19:17 |显示全部楼层
本帖最后由 pantierui 于 2010-11-17 19:20 编辑

我已经知道他们是重名了。但我都不能改。因为那个*module不是我们写的。
所以才来问问大家。

论坛徽章:
0
发表于 2010-11-17 19:24 |显示全部楼层
可是我的程序中没有用到sendmsg。况且我的bnddir中又没有QSOSRV1这个程序。
为什么他会检查这个啊。

bnddir是什么原理啊。

以前没怎么用过。

论坛徽章:
0
发表于 2010-11-18 09:19 |显示全部楼层
"我在编译一个RPGLE程序的时候,bnddir的时候出错了。"

编译什么程序?你是如何在这个程序codes中用binddir?或编译时用binddir?

呵呵,一看到本贴,我就感到你对binddir不熟悉。等我们把你的编译问题解决后,我再讲解binddir的概念和使用。

论坛徽章:
0
发表于 2010-11-18 09:32 |显示全部楼层
方便地话,请加入到我们qq群来,可以实时交互交流。qq群:中国AS400/RPG技术中心,36500902,500人。

另外,我也准备一个UC群,500人,10252705,作为qq的备份。

论坛徽章:
0
发表于 2010-11-22 17:23 |显示全部楼层
方便地话,请加入到我们qq群来,可以实时交互交流。qq群:中国AS400/RPG技术中心,36500902,500人。

另 ...
passthru 发表于 2010-11-18 09:32



已经申请加入。

论坛徽章:
0
发表于 2010-11-22 17:37 |显示全部楼层
"我在编译一个RPGLE程序的时候,bnddir的时候出错了。"

编译什么程序?你是如何在这个程序codes中用bind ...
passthru 发表于 2010-11-18 09:19



我编写的是一个rpgle程序。在rpgle中先声明要调用的程序的原型。
bndir(ptrlib/sample)中有多个引用的程序,如:
MLSCMNFUNC    *MODULE     *LIBL
JOBLOGMSGI     *MODULE     *LIBL
LLISTFUNC         *SRVPGM     *LIBL

rpgle中的声明
DConvertbarcode    PR             5I 0 EXTPROC('spVerifyHazmatByPart')
Dparm1                          22                                    
Dparm2                          22                                   
Dparm3                          22   
Dparm4                          22   
Dparm5                          1     

调用时
callp   Convertbarcode(pram1:pram2:pram3:pram4:pram5)

Convertbarcode程序在MLSCMFUNC中,是用c写的。

编译的时候用CRTBNDRPG,参数BNDDIR(ptrlib/sample)和DFTACTGRP(*no)

论坛徽章:
0
发表于 2010-11-23 12:54 |显示全部楼层
本帖最后由 passthru 于 2010-11-23 13:05 编辑

MLSCMNFUNC    *MODULE     *LIBL

MLSCMNFUNC是*module,不是*srvpgm。所以,不能跨越MLSCMNFUNC,即不能直接调用MLSCMNFUNC下的procedure,spVerifyHazmatByPart。

如果MLSCMNFUNC是一个*srvpgm,spVerifyHazmatByPart是这个*srvpgm下的一个procedure,即*module,这样就可以直接从上面代码用udf形式直接调用。

另外,给你一个建议,用*,pointer作为传参,用一个ds,放入/copybook。这样的好处,不会因为参数的变化修改pr,pi的接口定义。代码如下:

*copybook
d ParmDs              ds               qualified
d  Parm1                     22
d  Parm2                     22
d  Parm3                     22
d  Parm4                     22
d  Parm5                       1

*rpgle中定义
*Pr定义,copybook
DConvertbarcode    PR             5I 0 EXTPROC('spVerifyHazmatByPart')
d Ptr                                          *
*
dParmInDs              ds              likeds(ParmDs) based(Ptr)

论坛徽章:
0
发表于 2010-11-23 13:13 |显示全部楼层
另外,你有一处错误:

因为你的代码定义了:
DConvertbarcode    PR             5I 0 EXTPROC('spVerifyHazmatByPart')
这是UDF的形式,即Pr后跟随返回参数。就是PI用return直接返回结果参数到被调用程序,所以不能用callp,直接用function名就可以了,如

d RetCode               s                 5I  0

/free
      ....
      RetCode = Convertbarcode(...) ;
      ....

/end-free
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会

【架构革新 高效可控】2020年12月21日-23日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP