Share via


プログラミングの考慮事項

このトピックでは、Windows オペレーティング システムで APPC を使用してトランザクション プログラム (TP) を開発する方法について説明します。

バイトの順序付け
WINAPPC で定義されている定数の値。H と WINCSV。H は、使用されるハードウェアのバイト順序に依存します。 マクロは、定数を正しい値に設定するために使用されます。

既定では、Intel のリトル エンディアン バイト順序が使用され、下位バイトは 16 ビット値の後に高バイトが続きます。 ただし、インライン マクロを定義する場合は、WINAPPC でNON_INTEL_BYTE_ORDERマクロが使用されます。H と WINCSV。H は、定数のバイト順を反転 (反転) しません。 動詞制御ブロック (VCB) の非定数入力パラメーター (長さ、ポインターなど) は常にネイティブ形式です。

たとえば、AP_PARAMETER_CHECKの主な戻りコードは、0x0001の値を持つよう定義されています。 環境 (バイト順) によっては、定数AP_PARAMETER_CHECKが0x0001される場合とそうでない場合があります。 一部の形式では、メモリに表示される値が定義されます。他のユーザーは、2 バイト変数として定義します。 アプリケーションでは、ハードワイヤードされた値ではなく、常に指定された定数を使用するとは限りませんので、バイトをスワップするマクロを定義できます。 マクロの使用例を次に示します。

/* when NON_INTEL_BYTE_ORDER is specified, the APPC_FLIPI macro defined in WINAPPC.H macro becomes */  
#define APPC_FLIPI(x)    (x)  
  
/* otherwise this macro flips bytes by defining */  
#define APPC_FLIPI(X) APPC_MAKUS(APPC_HI_UC(X),APPC_LO_UC(X))  
  
/* the AP_PARAMETER_CHECK macro is now defined using the APPC_FLIPI macro */  
#define AP_PARAMETER_CHECK APPC_FLIPI (0X0001)      /* X '0001' */  

イベント
データを非同期的に受信するために、VCB のセマフォ フィールドにイベント ハンドルが渡されます。 このイベントは、APPC に渡されたときに非署名状態である必要があり、ハンドルはイベントにEVENT_MODIFY_STATEアクセスできる必要があります。

ライブラリ名
同じコンピューター上の Win16 API ライブラリと Win32 API ライブラリの共存をサポートするために、Win32 DLL 名が変更されました。

古い DLL 名 新しい DLL 名
WINAPPC.DLL WAPPC32.DLL
WINCSV.DLL WINCSV32.DLL

新しい DLL 名は、ホスト統合サーバーでのみ実行することを目的とした Win32 ベースのアプリケーションに使用する必要があります。

制限
Windows オペレーティング システムの場合、プロセスごとに許可される同時共通サービス動詞 (CSV) の数は 64 です。 スレッドごとにこれらの動詞の 1 つだけを同期 (ブロック) できます。

APPC を使用すると、プロセスあたりの同時会話の最大数は 15,000 です。 各プロセスでは、最大 15,000 個の同時 TP がサポートされます。

複数のスレッド
TP には、動詞を発行する複数のスレッドを含めることができます。 Windows APPC では、マルチスレッド Windows ベースのプロセスのプロビジョニングが行われます。 プロセスには、1 つ以上の実行スレッドが含まれています。 スレッドへのすべての参照は、マルチスレッド Windows 環境の実際のスレッドを参照します。

RECEIVE_AND_POSTMC_RECEIVE_AND_POST、RECEIVE_AND_WAITMC_RECEIVE_AND_WAITを除き、どの会話でも一度に 1 つの会話動詞のみを未処理にすることができます。ただし、他の会話には他の動詞を発行できます。 このガイドラインは、TP 動詞と TP にも適用されます。 複数の TP 動詞を発行できますが、TP では一度に 1 つの TP 動詞のみを未処理にすることができます。 これは、マルチスレッド アプリケーションと、非同期呼び出しを使用するシングル スレッド アプリケーションの両方に適用されます。

梱包
パフォーマンスに関する考慮事項では、VCB はパックされません。 最初の要素の後の VCB 構造体メンバー要素は、メンバー型のサイズまたは DWORD (4 バイト) 境界のいずれか小さい方に配置されます。 その結果、DWORD は DWORD 境界に配置され、WORD は WORD 境界に配置され、BYT は BYTE 境界に配置されます。 つまり、たとえば、プライマリ リターン コードとセカンダリ リターン コードの間に 2 バイトのギャップがあることを意味します。 したがって、VCB 内の要素には、指定された構造体のみを使用してアクセスする必要があります。

構造体と共用体メンバーの配置のこのオプションは、Microsoft C/C++ コンパイラの既定の動作です。 指定された論理ユニット アプリケーション (LUA) ライブラリとの互換性を保つには、他の C/C++ コンパイラを使用する場合、または Microsoft コンパイラを使用する場合に構造体配置オプションを明示的に指定する場合は、同等の構造体と共用体メンバーパッキング オプションを使用してください。

アプリケーションの登録と登録解除
すべての Windows APPC アプリケーションは、セッションの開始時に WinAPPCStartup を呼び出してアプリケーションを登録し、セッションの最後に WinAPPCCleanup を呼び出してアプリケーションを登録解除する必要があります。

すべての Windows CSV アプリケーションは、セッションの開始時に Windows SNA 拡張機能 WinCSVStartup を呼び出してアプリケーションを登録し 、WinCSVCleanup を呼び出して、セッションの終了時にアプリケーションを登録解除する必要があります。

実行時リンク
実行時に TP を APPC に動的にリンクするには、TP が次の呼び出しを発行する必要があります。

  • LoadLibrary を使用して、ダイナミック リンク ライブラリ WINAPPC.DLL または WAPPC32.DLL を読み込みます。

  • GETProcAddress : APPC、WinAsyncAPPCWinAPPCStartupWinAPPCCleanup など、DLL に必要なすべてのエントリ ポイントで APPC を指定します。

    実行時に TP を CSV に動的にリンクするには、TP で次の呼び出しを発行する必要があります。

  • LoadLibrary を使用して、Windows CSV 用のダイナミック リンク ライブラリ WINCSV.DLL または WINCSV32.DLL を読み込みます。

  • GETProcAddress: ACSSVCWinAsyncCSVWinCSVStartupWinCSVCleanup など、DLL に必要なすべてのエントリ ポイントに CSV を指定します。

    APPC または CSV ライブラリが不要になった場合、TP は FreeLibrary 呼び出しを発行する必要があります。

    他のコンポーネントへの降伏
    Windows 環境はマルチスレッドであるため、他のコンポーネントに生成する必要はありません。