Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プロトコル TP1/NET/OSAS-NIF編


dc_mcf_execap − アプリケーションプログラムの起動(C言語)

〈このページの構成〉

形式

ANSI C, C++の形式

#include <dcmcf.h>
int dc_mcf_execap(DCLONG action, DCLONG commform, char *resv01,
                  DCLONG active, char *apnam, char *comdata,
                  DCLONG cdataleng)

K&R版Cの形式

#include <dcmcf.h>
int dc_mcf_execap(action,commform,resv01,active,apnam,comdata,
                  cdataleng)
DCLONG          action;
DCLONG          commform;
char            *resv01;
DCLONG          active;
char            *apnam;
char            *comdata;
DCLONG          cdataleng;

機能

dc_mcf_execap関数は,TP1/NET/OSAS-NIFの場合,相手システムのアプリケーションプログラムを起動します。

また,システム内の通信ではUAP(SPPまたはMHP)から,apnamに設定したアプリケーション名のMHPを開始させます。

MHPに渡すメッセージの一つのセグメントの最大長は,32000バイトです。

SPPからdc_mcf_execap関数を呼び出す場合は,SPPがトランザクションとして処理していることと,そのSPPのメイン関数でdc_mcf_open関数を呼び出していることが前提です。

システム内のアプリケーションプログラムの起動については,マニュアル「OpenTP1 プログラム作成の手引」およびマニュアル「OpenTP1 プログラム作成リファレンス C言語編」を参照してください。

開始させるMHPに渡すメッセージのセグメント形式を次に示します。Lは,バッファ形式1の場合は8バイト,バッファ形式2の場合は4バイトです。

[図データ]

UAPで値を設定する引数

●action

開始させるMHPに渡すセグメントが論理メッセージの最終セグメントかどうかを,次の形式で設定します。

{DCMCFESI|DCMCFEMI}〔|{DCMCFBUF1|DCMCFBUF2}〕
DCMCFESI

先頭セグメントまたは中間セグメントを渡す場合に設定します。この値を設定したdc_mcf_execap関数を呼び出した場合は,そのあとに必ずactionにDCMCFEMIを設定したdc_mcf_execap関数を呼び出してください。

DCMCFEMI

最終セグメントを渡す場合,および論理メッセージが単一セグメントの場合に設定します。さらに,先頭セグメントまたは中間セグメントの引き渡し後,メッセージの引き渡しの終了を連絡する場合にもこの値を設定します。

DCMCFBUF1

バッファ形式1を使用する場合に設定します。

DCMCFBUF2

バッファ形式2を使用する場合に設定します。

●commform

DCNOFLAGSを設定します。

●resv01

ヌル文字列を設定します。

●active

0を設定します。

●apnam

起動するMHPのアプリケーション名を設定します。アプリケーション名は最大8バイトの長さです。アプリケーション名の最後にはヌル文字を付けてください。

●comdata

起動するMHPに渡すセグメントの内容を設定します。先頭セグメントの引き渡し後,メッセージの引き渡しの終了を連絡する場合で,セグメントの内容がないときも必ず設定してください。

●cdataleng

起動するMHPに渡すセグメントの長さを設定します。

先頭セグメントの引き渡し後,メッセージの引き渡しの終了を連絡する場合で,セグメントの内容がないときは,0を設定してください。

リターン値

リターン値

リターン値

(数値)

意味

DCMCFRTN_00000

0

正常に終了しました。

DCMCFRTN_71002

-12002

メッセージキューへの入出力処理時に障害が発生しました。

メッセージキューが閉塞されています。

メッセージキューが割り当てられていません。

cdatalengに32000バイトを超える値を設定しています。

MCFが終了処理中のため,apnamに設定したMHPを起動できません。

DCMCFRTN_71003

-12003

メッセージキューが満杯です。

DCMCFRTN_71004

-12004

メッセージを格納するバッファをメモリ上に確保できませんでした。

DCMCFRTN_71108

-12108

apnamに設定したアプリケーション名のMHPを開始しようとしましたが,開始しようとしたMHPの管理テーブルを確保できませんでした。

プロセスのローカルメモリが不足しています。

DCMCFRTN_72000

-13000

<MHPの実行でリターンした場合>

先頭セグメントを受信するdc_mcf_receive関数を呼び出す前に,dc_mcf_execap関数を呼び出しました。

<SPPの実行でリターンした場合>

トランザクションの処理でないSPPから,dc_mcf_execap関数を呼び出しました。

DCMCFRTN_72001

-13001

apnamに設定したアプリケーション名は,MCFで定義されていません。

apnamに設定したアプリケーション名が間違っています。

MCFマネジャ定義の通信サービス定義(mcfmcname)に,アプリケーション起動プロセス名またはMCF通信プロセス名を指定していません。

アプリケーション起動プロセスまたはMCF通信プロセスに対応するアプリケーション環境定義(mcfaenv -p)に,アプリケーション起動プロセス識別子を指定していません。

アプリケーション環境定義(mcfaenv -p)で指定したアプリケーション起動プロセス識別子と,アプリケーション起動プロセスまたはMCF通信プロセスのMCF環境定義(mcftenv -s)で指定する識別子が一致していません。

<論理端末名称を指定してアプリケーションを起動する場合>

  • 起動先アプリケーションのアプリケーション属性定義(mcfaalcap -n)のlnameオペランドに論理端末を指定していません。

  • 起動先アプリケーションのアプリケーション属性定義(mcfaalcap -n)のlnameオペランドに指定した論理端末を,MCF通信プロセスの論理端末定義(mcftalcle)に定義していません。

  • 起動先アプリケーションのアプリケーション属性定義に指定した論理端末が,request型論理端末またはsend型論理端末ではありません。

  • 起動先アプリケーションのアプリケーション属性定義で指定した論理端末は,アプリケーション起動を使えません。

<コネクションIDを指定してアプリケーションを起動する場合>

  • 起動先アプリケーションのアプリケーション属性定義(mcfaalcap -n)のcnameオペランドにコネクションIDを指定していません。

  • 起動先アプリケーションのアプリケーション属性定義(mcfaalcap -n)のcnameオペランドに指定したコネクションIDを,MCF通信プロセスのコネクション定義(mcftalccn)に定義していません。

  • MCF通信プロセスの論理端末定義(mcftalcle)に,request型論理端末を指定していません。

<SPPからアプリケーションを起動する場合>

  • アプリケーション起動プロセス識別子を起動元のUAPのユーザサービス定義,またはユーザサービスデフォルト定義のmcf_psv_idオペランドに指定していません。

  • 起動元のUAPのユーザサービス定義,またはユーザサービスデフォルト定義のmcf_psv_idオペランドに指定しているアプリケーション起動プロセス識別子が,アプリケーション起動プロセス,またはMCF通信プロセスのMCF環境定義(mcftenv -s),およびアプリケーション環境定義(mcfaenv -p)で指定しているアプリケーション起動プロセス識別子と一致していません。

  • 起動元のUAPのユーザサービス定義,またはユーザサービスデフォルト定義のmcf_mgridオペランドに指定しているMCFマネジャ識別子が,アプリケーション起動プロセスが属しているMCFマネジャの識別子と一致していません。

DCMCFRTN_72005

-13005

<actionでDCMCFESIを設定した場合>

cdatalengに0バイト,またはマイナス値を設定しています。

DCMCFRTN_72007

-13007

dc_mcf_reply関数をすでに呼び出した応答型(type=ans)のMHPから,応答型のMHPをdc_mcf_execap関数で起動させています。

dc_mcf_reply関数をすでに呼び出した継続問い合わせ応答型(type=cont)のMHPから,継続問い合わせ応答型のMHPをdc_mcf_execap関数で起動させています。

DCMCFTRN_72009

-13009

応答型(type=ans)のMHPから,dc_mcf_execap関数で応答型のMHPを2回以上起動させています。

継続問い合わせ応答型(type=cont)のMHPから,dc_mcf_execap関数で継続問い合わせ応答型のMHPを2回以上起動させています。

DCMCFTRN_72011

-13011

応答型(type=ans)のMHPから,dc_mcf_execap関数で応答型のMHPを2回以上起動させています。

継続問い合わせ応答型(type=cont)でないMHPから,dc_mcf_execap関数で継続問い合わせ応答型のMHPを2回以上起動させています。

DCMCFRTN_72016

-13016

actionに設定した値が間違っています。

resv01に設定した値が間違っています。

引数に設定した値に間違いがあります。

DCMCFRTN_72024

-13024

commformに設定した値が間違っています。

DCMCFRTN_72026

-13026

actionに設定したセグメント種別(DCMCFESIまたはDCMCFEMIを設定)の値が間違っています。

DCMCFRTN_72041

-13041

<actionでDCMCFEMIを設定した場合>

  • cdatalengに0バイト,またはマイナス値を設定しています。

  • actionにDCMCFESIを設定したdc_mcf_execap関数を呼び出さないで,メッセージの引き渡しの終了を連絡しています。

DCMCFRTN_77001

-18001

起動しようとするアプリケーションに対応する論理端末は,現在仕掛り中で使用できません。または,使用できる論理端末がありません。

上記以外

プログラムの破壊などによる,予期しないエラーが発生しました。

(凡例)

−:該当しません。