Module as/400:从CL调用C程序

Module as/400:从CL调用C程序,module,call,ibm-midrange,procedure,Module,Call,Ibm Midrange,Procedure,as/400 ILE允许将来自不同语言的过程编译成模块,然后绑定在一起形成单个程序。我正试图通过一个包含C函数的模块来实现这一点,该函数是从我的CL模块(入口模块)调用的 C模块源代码: mylib/myfile/csource int getValue(void){ return 20; } CL模块源:mylib/myfile/clsource pgm dcl var(&NUM) type(*INT) callprc prc(getValue) rtnval(&NU

as/400 ILE允许将来自不同语言的过程编译成模块,然后绑定在一起形成单个程序。我正试图通过一个包含C函数的模块来实现这一点,该函数是从我的CL模块(入口模块)调用的

C模块源代码: mylib/myfile/csource

int getValue(void){
    return 20;
}
CL模块源:mylib/myfile/clsource

pgm
dcl var(&NUM) type(*INT)
callprc prc(getValue) rtnval(&NUM) /* <== Calling C function. */
endpgm
这两个可以编译,没问题。 只是,当我尝试从这两个模块创建程序时,ILE绑定器抱怨CL源中的函数getValue未定义,程序创建失败

crtpgm pgm(mypgm) module(clmodule cmodule) entmod(clmodule) detail(*basic)
crtpgm给我的错误是:

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

Symbol    Type        Library        Object        Linked        Name
          *MODULE     mylib          clmodule      *YES          getValue

我遗漏了什么?

CL语言不区分大小写

实际上,CL中的一个不带引号的字符串是隐式大写的

然而,C是区分大小写的。您需要引用过程名称

callprc prc('getValue') rtnval(&NUM)
callprc prc('getValue') rtnval(&NUM)