3.2.2 Windows環境の場合の翻訳と結合

<この項の構成>
(1) 手順
(2) 翻訳と結合

(1) 手順

CUP作成時の手順を次の図に示します。

図3-1 CUP作成時の手順

[図データ]

(2) 翻訳と結合

(a) ソースプログラムの翻訳

Windows環境でCUPのオブジェクトファイルを作成するには,Microsoft C 6.0以降のコンパイラを使用します。翻訳はccコマンドで実行します。

翻訳時に必須となるオプションは,通常オブジェクトライブラリを使用する場合とDLLを使用する場合とで異なります。それぞれの場合のオプションを,次の表に示します。

表3-3 翻訳時の必須オプション(Windows環境で通常オブジェクトライブラリを使用する場合)

クライアント機能オプションオプションの意味
TP1/Client/P/AM適用するメモリモデルの種類です。
/AM…Mediumメモリモデル
(Windows環境の場合,TP1/Client/Pライブラリの適用メモリモデルがMediumメモリモデルのためです)
/Zp構造体をパッキングします。
/GwWindows専用のプロローグ・エピローグを生成します。
/DDCCLTFARポインタをfarポインタとして定義します。
XATMIインタフェース機能を使用する場合,/DDCCLTDLLも必須です。

表3-4 翻訳時の必須オプション(Windows環境でDLLを使用する場合)

クライアント機能オプションオプションの意味
TP1/Client/P/Zp構造体をパッキングします。
/GwWindows専用のプロローグ・エピローグを生成します。
/DDCCLTFARポインタをfarポインタとして定義します。
/DDCCLTDLLTP1/Client/P提供のヘッダファイルをDLL用に展開します。

ソースプログラムを翻訳するときのコマンドの入力例を次に示します。

〈例〉
C言語で作成したCUPのソースプログラム名…
  • cup.c(メイン関数)
  • cupsub1.c(内部関数1)
  • cupsub2.c(内部関数2)
この場合,それぞれのソースプログラムを次のように翻訳します。
 
通常オブジェクトライブラリの場合

CL /AM /Zp /Gw /DDCCLTFAR /c cup.c
CL /AM /Zp /Gw /DDCCLTFAR /c cupsub1.c
CL /AM /Zp /Gw /DDCCLTFAR /c cupsub2.c

XATMIインタフェース機能を使用する場合,/DDCCLTDLLも指定する必要があります。
 
DLLの場合

CL /Zp /Gw /DDCCLTFAR /DDCCLTDLL /c cup.c
CL /Zp /Gw /DDCCLTFAR /DDCCLTDLL /c cupsub1.c
CL /Zp /Gw /DDCCLTFAR /DDCCLTDLL /c cupsub2.c

上記CLコマンドを実行すると,次のオブジェクトファイルが作成されます。
  • cup.obj(メイン関数のオブジェクトファイル)
  • cupsub1.obj(内部関数1のオブジェクトファイル)
  • cupsub2.obj(内部関数2のオブジェクトファイル)
(b) リソース定義ファイルの作成

この例では,リソースとしてアイコンを定義します。リソース定義ファイルcup.rcを次のように作成します。

CUPI   ICON cup.ico

CUPIはアイコンに付けた任意の名称です。アイコンのファイル(cup.ico)は,Windows SDKに含まれるツールであるSDKPAINT.EXEを使用して作成します。
(c) リソースの翻訳

Windows SDKのリソースコンパイラを使用して,リソース定義ファイル(cup.rc)を次のように翻訳します。

rc /r cup.rc

上記rcコマンドを実行すると,リソースファイルcup.resが生成されます。

(d) モジュール定義ファイルの作成

モジュール定義ファイルcup.defの作成例を次に示します。

NAME        CUPEXEC
DESCRIPTION 'CUP SAMPLE PROGRAM'
EXETYPE     WINDOWS
STUB        'WINSTUB.EXE'
CODE PRELOAD MOVEABLE
DATA PRELOAD MOVEABLE
HEAPSIZE     1024
STACKSIZE    8192

STACKSIZEは,8192以上を指定してください。
(e) CUPの結合

CUPの実行形式ファイルは,次に示すファイルを結合させて作成します。結合は,LINKコマンドで実行します。

注※
文字コード変換機能を使用する場合は,CLTCNV32.LIBも必要です。