メインフレーム上でC言語で書かれたベンダーパッケージは、ユーザー出口を介してその機能の一部をオーバーライドするオプションを提供します。提供されるC関数のプロトタイプは次のとおりです。メインフレーム上のC - > COBOLインター言語通信
extern int SomeExit (void * Parameters,
void * Record1,
void * Record2,
char ComparisonType,
char * RankString,
void * NotUsed1,
int * NotUsed2)
私たちは主にCOBOL店は、私はIBM ILCガイドで与えられた規則に従うことをしようと、出口を実装する(DLLなど)のEnterprise COBOL 4.2プログラムを定義したとおりである(https://www.ibm.com/support/knowledgecenter/en/SSLTBW_1.13.0/com.ibm.zos.r13.ceea400/clcccb5.htm#clcccb5 )とこの古いSHAREプレゼンテーションの例は:http://www-01.ibm.com/support/docview.wss?uid=swg27003846&aid=1ですが、結果として得られたプログラムは、出口を呼び出して私のDISPLAY
メッセージの前に異常終了しています。私の前提は、受信データ構造を正しく宣言していないということです。以下は私の現在のテストコードのスニペットです(私の命名規則を無視してください - これはインターフェースを証明するためのプロトタイプであり、基本的な呼び出しがあれば社内標準に書き直されます)。
IDENTIFICATION DIVISION.
PROGRAM-ID. "SomeExit".
...
LINKAGE SECTION.
01 WS-PARAMETERS-POINTER USAGE IS POINTER SYNCHRONIZED.
01 SORT-PASS-RECORD1-POINTER USAGE IS POINTER SYNCHRONIZED.
01 SORT-PASS-RECORD2-POINTER USAGE IS POINTER SYNCHRONIZED.
01 WS-COMPARISION-TYPE PIC X.
01 WS-RANK-STRING-POINTER USAGE IS POINTER SYNCHRONIZED.
01 WS-NOT-USED1-POINTER USAGE IS POINTER SYNCHRONIZED.
01 WS-NOT-USED2-POINTER USAGE IS POINTER SYNCHRONIZED.
01 WS-RETURN PIC S9(9) USAGE IS BINARY.
...
PROCEDURE DIVISION USING BY VALUE WS-PARAMETERS-POINTER
SORT-PASS-RECORD1-POINTER
SORT-PASS-RECORD2-POINTER
WS-COMPARISION-TYPE
WS-RANK-STRING-POINTER
WS-NOT-USED1-POINTER
WS-NOT-USED2-POINTER
RETURNING WS-RETURN.
DISPLAY 'IN EXIT'.
...
MOVE 0 TO WS-RETURN.
GOBACK.
異常終了である:
CEE3250C The system or user abend U 016 R=00000000 was issued.
From entry point main at compile unit offset +00000192 at entry offset +00000192 at address 28500ECA.
ベンダーコードが動的にDLLを呼び出します。 DLLを削除すると、終了コードが見つからないというメッセージが表示され、Cコードがそのコードを呼び出そうとしているようです。
Iは、BY VALUE
をドロップ(私はデフォルトであることを理解が)BY REFERENCE
を使用して実際の構造の定義でPOINTERs
の交換などPROCEDURE DIVISION USING
のバリエーションを試みました。 COBOLルーチンに渡されたパラメータをどのように構造化するかについてのマニュアルを誤解しましたか?
編集:私はベンダーとオープンなサポートチケットを持っていますが、まだ役に立たないものは何も返されていません。
おかげで、デビッド私は法案の提案ごとに、呼び出し元の構造のより良い理解に基づくソリューションを決定することができたコメントへの
何が異常終了するのですか?どのようなプログラムのどの位のずれ?なぜ、すべての点で「BY VALUE」なのか、私は比較型のみを考えたでしょう、他はBY REFERENCEですか?あなたはそれが何をしているのか分かりますか? 'SYNCHRONIZED'を忘れてください。あなたのリンクセクションの項目にWS-プレフィックスが付いているのはなぜですか?厳密には、常にWS-RETURNをGOBACKの前に設定する必要があります。どのバージョンのEnterprise COBOL? Cからの呼び出しはDLLから来ていますか?ベンダーに尋ねましたか(ライセンスにはサポートが含まれています)。 –
1時間に23回のビューと2回のアップボート。それはうわーだ! COBOLの質問ですおそらく、COBOLの読者よりもCの方が多く、メインフレームよりもメインフレーム以外であることを意味します:-) –
あなたの 'PROGRAM-ID'は何ですか?出口が静的にリンクされることを意味するのか、ベンダールーチンがあなたのcobol-dllを 'フェッチする 'のですか? –