2016-09-01 18 views
2

as/400 ILEを使用すると、異なる言語のプロシージャーをモジュールにコンパイルし、結合して1つのプログラムにすることができます。私はエントリモジュールである私のCLモジュールから呼び出されているC関数を含むモジュールでこれを達成しようとしています。as/400: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) 

これらの2つのコンパイルは問題ありません。 ILEバインダーは、これらの2つのモジュールからプログラムを作成しようとすると、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 

を私は何をしないのですか?

答えて

5

CL言語は大文字小文字を区別しないです...

は実は、CLでの引用符で囲まれていない文字列は、暗黙的に大文字にあります。

ただし、Cでは大文字と小文字が区別されます。プロシージャ名を引用する必要があります

callprc prc('getValue') rtnval(&NUM) 
関連する問題