as/400:从CL调用C程序

aga*_*anm 2 module procedure call ibm-midrange

as/400 ILE允许将来自不同语言的过程编译成模块,然后绑定在一起以制作单个程序.我正在尝试使用包含从我的CL模块调用的C函数的模块来完成此操作,该模块是入口模块.

C模块源:mylib/myfile/csource

int getValue(void){
    return 20;
}
Run Code Online (Sandbox Code Playgroud)

CL模块源:mylib/myfile/clsource

pgm
dcl var(&NUM) type(*INT)
callprc prc(getValue) rtnval(&NUM) /* <== Calling C function. */
endpgm
Run Code Online (Sandbox Code Playgroud)

然后我将每个文件编译成自己的模块.

crtcmod module(cmodule) srcfile(myfile) srcmbr(csource)
crtclmod module(clmodule) srcfile(myfile) srcmbr(clsource)
Run Code Online (Sandbox Code Playgroud)

这两个编译,没问题.只是,当我尝试从这两个模块创建程序时,ILE绑定器抱怨CL源中的函数getValue未定义,程序创建失败.

crtpgm pgm(mypgm) module(clmodule cmodule) entmod(clmodule) detail(*basic)
Run Code Online (Sandbox Code Playgroud)

crtpgm给我的错误:

Unresolved references........................: 1

Symbol    Type        Library        Object        Linked        Name
          *MODULE     mylib          clmodule      *YES          getValue
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

Cha*_*les 5

CL语言不区分大小写......

实际上,CL中的一个不带引号的字符串是隐含的上层字符串.

但是,C区分大小写.您需要引用过程名称

callprc prc('getValue') rtnval(&NUM)
Run Code Online (Sandbox Code Playgroud)