- ベストアンサー
COBOLから呼ばれる時
COBOLプログラムから呼び出され、ファイルのレコードを一行読んでレコードの内容を返すというcサブルーチンを作っているのですが、COBOL←→c間でのインタフェースの扱いかたがよくわからなくて困っています。(ちなみにこのモジュールはcからも呼ばれる事がある) COBOLはコピー句(test001.cbl, test002.cbl)に値を入れて、cサブルーチンにそれを渡しています。 テストはCOBOL85を使用してるので、cサブルーチンの中のデータを見ることができません。なので、返ってくるコピー句の中身を見るのですが、とにかく値が設定されてかえってこないのです。ただ単にロジックのバグと言う可能性もあるけど(^^; 私はインタフェース環境の事がまだ良く解っていないので、今回こちらに質問した次第です。経験者の方がいましたら、どうかおしえてください。 あ、それからCOBOLから渡される値は、c側では全てchar型で受け取らなければいけないような話しを聞いたのですが、本当でしょうか? もう一つ。 コピー句の中で「F-CODE PIC X(2)」のようにハイフンがあるのですが、cではハイフンが使えないからダメなんでしょうか? たくさん質問してしまいましたが、どうかよろしく。 /COBOL側/ -------------------------------------------------- CALL 'TEST1' USING BY VALUE TEST001 TEST002. -------------------------------------------------- /cサブルーチン側/ -------------------------------------------------- int TEST1(test001, test002) char *test001; char *test002; { ・ ・ ・ return (0); } --------------------------------------------------
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
「マニュアルを読め」と言う No.1 の回答が本質だとは思いますが、想像できる範囲で。 > 返ってくるコピー句の中身を見るのですが、とにかく値が設定されてかえってこない 引数で指定した変数の内容を、C の関数で設定して、それを COBOL 側で参照したい、 ということですよね。であれば、 > CALL 'TEST1' USING BY VALUE TEST001 TEST002. CALL 'TEST1' USING BY REFERENCE TEST001 TEST002. ということだと思いますよ。詳細は、マニュアルの CALL 文のところを読むと わかる(かもしれない)でしょう。 > COBOLから渡される値は、c側では全てchar型で受け取らなければいけない その言い方は正確ではないですが、だいたいの場合に当てはまるはずです。 C には、変数に対する桁数の指定、という概念がありません。 USAGE 句で BINARY とか指定した変数は、C 側では short で受取れるはずです。 > コピー句の中で「F-CODE PIC X(2)」のようにハイフンがあるのですが、cではハイフンが使えないからダメなんでしょうか? 仮引数と実引数の変数名は一致している必要はありません。呼び側と受け側で一致 している必要があるのは、その型と順序です。 # 実は、COBOL をやった事がありません (^^; # 仕事で COBOL のソースを読むはめになりそうなので、自分の勉強に利用させて # もらいます。「専門家」のチェックは「計算機屋」だ、という意味でチェックしました。
その他の回答 (1)
- ranx
- ベストアンサー率24% (357/1463)
言語間インタフェースは規格化されていないケースがほとんどだと思いますし、 仮に規格化されていても、お使いの言語処理系がそれに準拠しているとも 限りませんから、まずはお使いの言語処理システムのマニュアルを参照された 方がよいと思います。その上で、なお分からないということでしたら、お使いの 環境(OS・言語処理ソフト等)を示した上で質問されれば、あるいは知っている 人がいるかもしれません。
お礼
聞く前にまず自分で調べるのは当然ですよね。(^^; 今回は、切羽詰っていたので皆さんに頼ってしまいました。 でも、こちらのサイトは本当に頼りになります。 アドバイスありがとうございます。
お礼
ありがとうございます。 とても参考になりました。 計算機屋も大変でね。(^^; 作る人にもよりますが、他人の書いたソースはわかりずらいですよね。(笑 がんばってください。