4.8.3 TP1/ServerのCOBOL言語のサービスルーチンの利用
従来のSPPで使用していたTP1/ServerのCOBOL言語のサービスルーチンを利用する場合は,プラットフォーム呼び出し(P/Invoke)を使います。ソースプログラム上の記述は,通常の呼び出しもプラットフォーム呼び出しも同じです。しかし,プラットフォーム呼び出しの場合は,P/Invoke指示ファイルを-PInvokeオプションに指定して,呼び出すプログラムがアンマネージプログラムであることをコンパイラに指示する必要があります。
P/Invoke指示ファイルのサンプルの格納場所については,「2.1.3(1) Extension .NETが提供するP/Invoke指示ファイルのサンプル」を参照してください。
(1) P/Invoke指示ファイルの作成例
TP1/Server BaseおよびTP1/LiNKの場合のP/Invoke指示ファイルの作成例を次に示します。
- TP1/Server Baseの場合
CBLDCADM(DLL="LIBBETRAN.DLL",CallConv=Cdecl) CBLDCLOG(DLL="LIBBETRAN.DLL",CallConv=Cdecl) CBLDCPRF(DLL="LIBBETRAN.DLL",CallConv=Cdecl) CBLDCRAP(DLL="LIBBETRAN.DLL",CallConv=Cdecl) CBLDCRPC(DLL="NJSCMLIB.DLL",CallConv=Cdecl) CBLDCTRN(DLL="LIBBETRAN.DLL",CallConv=Cdecl) CBLDCMCF(DLL="LIBMCF.DLL",CallConv=Cdecl) CBLDCTAM(DLL="LIBTAM.DLL",CallConv=Cdecl)
- TP1/LiNKの場合
CBLDCADM(DLL="BETRAN.DLL",CallConv=Cdecl) CBLDCLOG(DLL="BETRAN.DLL",CallConv=Cdecl) CBLDCPRF(DLL="BETRAN.DLL",CallConv=Cdecl) CBLDCRAP(DLL="BETRAN.DLL",CallConv=Cdecl) CBLDCRPC(DLL="NJSCMLIB.DLL",CallConv=Cdecl) CBLDCTRN(DLL="BETRAN.DLL",CallConv=Cdecl) CBLDCMCF(DLL="LIBMCF.DLL",CallConv=Cdecl)
(2) P/Invoke指示ファイル作成時の注意事項
-
P/Invoke指示ファイルの拡張子はpivにしてください。
-
CBLDCRPCサービスルーチンの場合は,NJSCMLIB.DLLを必ず指定してください。その他のTP1/ServerのCOBOL言語のサービスルーチンについては,適切なライブラリファイル名を指定してください。
-
従来のWindows版のSPPでは,同じサービスルーチンに対する複数の呼び出しで,引数が異なるものがあっても問題ありませんでした。しかし,SPP.NETでは同じサービスルーチンに対する複数の呼び出しで引数の数が異なるものがあるとSystem.InvalidProgramException例外が発生します。System.InvalidProgramException例外については,マニュアル「COBOL2002 for .NET Framework ユーザーズガイド」を参照してください。