次の方法で共有


プログラミングに関する考慮事項

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

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

既定では、Intel のリトル エンディアン バイト順が使用され、下位バイトは 16 ビット値の後に上位バイトが続きます。 ただし、インライン マクロを定義する場合、WINAPPC.H および WINCSV.H で使用される NON_INTEL_BYTE_ORDER マクロは定数のバイト順を逆転しません。 動詞制御ブロック (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 名は、Host Integration Server でのみ実行することを目的とした Win32 ベースのアプリケーションに使用する必要があります。

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

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

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

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

パッキング
パフォーマンスに関する考慮事項として、VCB はパックされません。 最初の要素の後の VCB 構造体メンバー要素は、メンバー型のサイズまたは DWORD (4 バイト) 境界のいずれか小さい方に配置されます。 その結果、DWORD は DWORD 境界に配置され、WORD は WORD の境界に配置され、BYTEs は 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読み込みます。

  • APPC、WinAsyncAPPCWinAPPCStartupWinAPPCCleanup など、DLL への必要なすべてのエントリ ポイントで APPC を指定する GetProcAddress

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

  • Windows CSV のダイナミック リンク ライブラリWINCSV.DLLまたはWINCSV32.DLLを読み込む LoadLibrary

  • ACSSVCWinAsyncCSVWinCSVStartupWinCSVCleanup など、DLL への必要なすべてのエントリ ポイントで CSV を指定する GetProcAddress

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

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