3.2.1 C言語でのUAPの作成
(1) マニフェストファイルの用意
Visual Studio上で作成したプログラムを動作させる場合には,マニフェストファイルが必要です。プログラムにマニフェストファイルを埋め込むか,実行ファイルと同じフォルダにマニフェストファイルをコピーしてください。
なお,Visual Studio 2010を使用してプログラムを作成している場合,マニフェストファイルが作成されないことがあります。この場合,マニフェストファイルは必須ではありません。
- 参考
- マニフェストファイルとは,実行ファイル(例:.exe,.dll)が動作するために必要なライブラリ(DLL)の情報を記載しているファイルで,実行ファイルの作成時に自動的に作成されます。実行ファイルを動作させるために必須のファイルです。
(2) Cランタイムライブラリのインストール
TP1/Server BaseはVisual Studioで作成されています。このため,TP1/Server Baseを動作させるためには,Cランタイムライブラリをインストールする必要があります。
インストールが必要なCランタイムライブラリについては,リリースノートを参照してください。
(3) メイクファイルの例(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
- マニフェストファイルを埋め込まない場合は,この行の内容を削除してください。
- なお,Visual Studio 2010を使用してプログラムを作成している場合,マニフェストファイルが作成されないことがあります。この場合,マニフェストファイルは必須ではないため,この行の内容を削除してください。
(4) メイクファイルの例(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 |