ILE RPG で C ランタイム関数を使用する

ILE になって言語の相互乗り入れ、というか、より簡単に処理毎にそれに適した言語で記述することができるようになりました。
Java のクラス、メソッドを使うことなどもできるようになっています。

サブプロシージャープロトタイプ、プロシージャー・インターフェイスなどといった機能の応用、といったかんじで理解するのが簡単かもしれません。

今回は、例として C のランタイム関数にある sin という数学関数を使用する方法を見てみましょう。

H BNDDIR('QC2LE') DFTACTGRP(*NO)                                    
D sin             PR             8F   extProc('sin')      
D   radians                      8F   Const               
D mySine          S             11P 9                     
                                                          
 /free                                                    
    mySine = sin(.05);                                    
                                                          
    *inLR = *on ;                                         
    return ;                                              
 /end-free                                                

C のランタイム関数を使用するために H-Spec に BNDDIR('QC2LE') と指定します。
その上で sin 関数をプロトタイプとして定義するだけで OK です。

実行単位はプロシージャー/関数であり、それは別のモジュールに存在していても"バインド"できるわけですね。そのバインドされるプロシージャーはプロトタイプ定義で呼び出し方法がわかっている限り、(ILE の仲間であれば) どんな言語で書かれていてもいい、というわけです。

要は関数を中心にできているわけで C の知識がある人には理解しやすいことだと思います。
ライブラリーを"バインド "して (C の場合は #INCLUDE ですね) プロトタイプ宣言をして関数を使用する、という考え方はまったく同じです。(ですから、C をやってた人にもとっつきやすいでしょう。また、最初に学ぶ言語が RPG という人も、C などのいわゆる"普通の"プログラミング言語に続く知識をより簡単に学べるわけなので、安心して勉強してもらっていい、ということですね)
呼び出し側の RPG と呼び出されて値を戻す C との間でデータ型を互換性のあるものにしておく必要があります。「ILE RPG での数値データタイプ」も参照してみてください。(↑の例はかならずしも従ってはいませんが …)

やはりこのあたりの概念的な話は「ILE 概念」「ILE 概念 V6R1」「ILE 概念 V7R1」を読んだ方がわかりやすいところはありますね。ぜひ機会を見つけて読んでみてください。ILE が出てきたときは古ーい人に「時代に逆行している」などと言われたものですが、正しく時代を見ていたことがわかります。

ちなみに CL からも C の関数を使用することができます。「ILE CL で C 標準関数を使用する (メモリ操作とポインタ)」を参考にしてみてください。

[Top Pageに戻る]

Ads by TOK2