as/400: 从 CL 调用 C 程序
as/400: call C procedure from CL
as/400 ILE 允许将来自不同语言的过程编译成模块,然后绑定在一起形成一个程序。我正在尝试使用一个包含从我的 CL 模块调用的 C 函数的模块来完成此操作,该模块是入口模块。
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
然后我将每个文件编译成它们自己的模块。
crtcmod module(cmodule) srcfile(myfile) srcmbr(csource)
crtclmod module(clmodule) srcfile(myfile) srcmbr(clsource)
这两个编译,没问题。
只是,当我尝试从这两个模块创建程序时,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)
as/400 ILE 允许将来自不同语言的过程编译成模块,然后绑定在一起形成一个程序。我正在尝试使用一个包含从我的 CL 模块调用的 C 函数的模块来完成此操作,该模块是入口模块。
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
然后我将每个文件编译成它们自己的模块。
crtcmod module(cmodule) srcfile(myfile) srcmbr(csource)
crtclmod module(clmodule) srcfile(myfile) srcmbr(clsource)
这两个编译,没问题。 只是,当我尝试从这两个模块创建程序时,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)