Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 使用の手引 Windows(R)編


3.2.1 C言語でのUAPの作成

ここでは,UAPをC言語で作成する場合について説明します。

〈この項の構成〉

(1) Cランタイムライブラリのインストール

TP1/Server BaseはVisual Studioで作成されています。このため,TP1/Server Baseを動作させるためには,Cランタイムライブラリをインストールする必要があります。

インストールが必要なCランタイムライブラリについては,リリースノートを参照してください。

(2) メイクファイルの例(C言語:SPPの場合)

SPPを作成する場合のメイクファイルの例を示します。

(a) ソースファイル名

メイクファイルの例中で使用するソースファイル名を次に示します。

  • C言語で作成したUAPのソースプログラム名:

    • exmain.c(メイン関数)

    • exsv1.c(サービス関数1)

    • exsv2.c(サービス関数2)

  • RPCインタフェース定義ファイル名:ex.def

(b) メイクファイルの例

メイクファイルの例を次に示します。

NODEBUG = 1
!include <ntwin32.mak>
# TP1TEST Make File
SYSLIB = $(conlibsdll)
TP1LIB = [libdam.lib]※1 [libtam.lib]※2 libbetran.lib
 
all:TP1TEST.exe
#コンパイル
exmain.obj:exmain.c
         $(cc) $(cflags) $(cvarsdll) $*.c
exsv1.obj:exsv1.c
         $(cc) $(cflags) $(cvarsdll) $*.c
exsv2.obj:exsv2.c
         $(cc) $(cflags) $(cvarsdll) $*.c
ex_sstb.obj:ex_sstb.c
         $(cc) $(cflags) $(cvarsdll) $*.c
#スタブソースファイルの作成
ex_sstb.c:ex.def
         $(DCDIR)\bin\stbmake $?
#リンケージ
TP1TEST.exe: exmain.obj exsv1.obj exsv2.obj ex_sstb.obj
         $(link) $(conflags) -out:$*.exe $** \
         [$(DCDIR)\spool\trnrmcmd\userobj\dctrninf.obj \]※3
         $(TP1LIB) $(SYSLIB)
         [mt -manifest $@.manifest -outputresource:$@;1]※4
注※1

libdam.libは,TP1/FS/Direct Accessを使用する場合だけ指定してください。

注※2

libtam.libは,TP1/FS/Table Accessを使用する場合だけ指定してください。

注※3

$(DCDIR)\spool\trnrmcmd\userobj\dctrninf.objは,トランザクション機能を使用する場合だけ指定してください。なお,dctrninf.objには,trnmkobjコマンドで作成したトランザクション制御用オブジェクトファイル名を指定します。trnmkobjコマンドについては,「7. 運用コマンド」を参照してください。

注※4

マニフェストファイルを埋め込まない場合は,この行の内容を削除してください。

(3) メイクファイルの例(C言語:MHPの場合)

MHPを作成する場合のメイクファイルの例を次に示します。

NODEBUG = 1
!include <ntwin32.mak>
# makefile for making UAP(C Language)
 
# command
STBMAKE           =       $(DCDIR)\bin\stbmake.exe
 
# stub name
STBMAKE_MHP_SRC   =       mhp_sstb
 
# user server object
MHP_SRC           =       mhpmain.obj mhp_sv.obj
 
# include file
INCDIR            =       -I.                 \
                          -I $(DCDIR)\include
 
# common object
SH_OBJ            =       $(DCDIR)\spool\trnrmcmd\userobj\mcf_sw.obj
 
# common library
LIBNAME           =       $(DCDIR)\lib\libmcf.lib \
                          $(DCDIR)\lib\libmnet.lib \
                          $(DCDIR)\lib\libbetran.lib
 
# compiler options
CC                =       $(cc)
CCOPT             =       -nologo $(cflags) $(cvarsdll)
CONFIG            =       -c
CFLAGS            =       $(CCOPT) $(CONFIG) $(INCDIR)
 
# linker options
LK                =       $(link)
LNKFLG            =       $(conflags) /NODEFAULTLIB
LINKAGE           =       $(conlibsdll) $(LIBNAME) msvcrt.lib
 
.c.obj:
       $(CC) $*.c $(CFLAGS)
 
all : $(SH_OBJ) tcpmhp.exe
 
$(STBMAKE_MHP_SRC).c :
        $(STBMAKE) -s $(STBMAKE_MHP_SRC).c $(STBMAKE_MHP_SRC).def
 
tcpmhp.exe : $(STBMAKE_MHP_SRC).obj $(MHP_SRC)
        $(LK) $(LNKFLG) $** $(LINKAGE) $(SH_OBJ) -out:$@
        !if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;1
        !if exist $@.manifest del $@.manifest
 
$(SH_OBJ) :
        $(DCDIR)\bin\trnmkobj -o mcf_sw -R OpenTP1_MCF
注※

Visual Studio 2015,Visual Studio 2017,Visual Studio 2019,またはVisual Studio 2022を使用する場合,次のファイルも指定してください。

  • ucrt.lib

  • vcruntime.lib