Windows の CPI-C の考慮事項

このトピックでは、Windows オペレーティング システムに基づいてプログラムを開発するときに注意する必要がある情報をまとめています。

メッセージの投稿を使用した非同期完了通知
非同期操作が完了すると、アプリケーション ウィンドウ hwndNotify は、入力文字列として "WinAsyncCPIC" を持つ RegisterWindowMessage によって返されたメッセージを受け取ります。 wParam 値には、完了している操作のconversation_return_codeが含まれています。 その値は、最初に発行された操作によって異なります。 IParam 引数には、元の関数呼び出しで指定されたconversation_IDへのCM_PTRが含まれています。

Win32® イベントを使用した非同期完了通知
ブロックされていない会話で動詞が発行されると、非同期的に完了する場合はCM_OPERATION_INCOMPLETEが返されます。 イベントが会話に登録されている場合、アプリケーションは WaitForSingleObject または WaitForMultipleObjects を呼び出して、動詞の完了を通知できます。 WinCPICExtractEvent を使用すると、通信用の共通プログラミング インターフェイス (CPI-C) アプリケーションでこのイベント ハンドルを決定できます。 動詞が完了したら、アプリケーションで Wait_For_Conversationを呼び出して、非同期動詞のリターン コードを決定する必要があります。 Cancel_Conversation関数を呼び出して、操作と会話自体を取り消すことができます。

他の API と同様に、イベントをリセットするのはアプリケーションの責任です。

イベントが登録されていない場合、非同期動詞は現在と同様に完了します。これは、アプリケーションが CPI-C ライブラリに登録したウィンドウにメッセージを投稿することです。

バイトの順序付け
既定では、Intel バイト順が使用されます。 インライン環境の場合、NON_INTEL_BYTE_ORDERを定義すると、定数に必要なすべての反転が行われます。 動詞制御ブロック (VCB) の非固定入力パラメーター (長さやポインターなど) は、常にネイティブ形式です。

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

ライブラリ名
Win32® DLL 名が WINCPIC32.DLL。

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

梱包
パフォーマンス上の理由から、VCB はパックされません。 その結果、DWORD は DWORD 境界、WORD では WORD、BYT は BYTEs に存在します。 VCB には、指定された構造体を使用してアクセスする必要があります。

実行時のリンク
TP を実行時に CPI-C に動的にリンクするには、TP で次の問題が発生する必要があります。

  • LoadLibrary を使用して、WINCPIC 用のライブラリ WINCPIC.DLL または WINCPIC32.DLL を動的に読み込みます。

  • GetProcAddress を使用して、ダイナミック リンク ライブラリ (DLL) への目的のエントリ ポイントとして WINCPIC を指定します。

  • CPI-C ライブラリーが不要になった場合の FreeLibrary

    同時会話
    プログラムは、プロセスごとに 64 個の会話に同時に参加できます。

    アプリケーションの終了
    Windows オペレーティング システムでは、CPI-C はアプリケーションがいつ終了したのかを確認できません。 そのため、アプリケーションを閉じる必要がある場合 (たとえば、ユーザーから ALT + F4 の結果としてWM_CLOSE メッセージを受信する)、アプリケーションは WinCPICCleanup を呼び出す必要があります。

    他のコンポーネントへの譲り方
    CPI-C および共通サービス動詞 (CSV) を処理する場合、SnaBase などの別のコンポーネントがメッセージを受信してアプリケーションに渡せるようにするために、ライブラリ コードが生成する必要がある場合があります。 これは、Windows 拡張機能 の WinCPICSetBlockingHookWinCPICUnhookBlockingHook を使用して実現できます。

    WinCPICSetBlockingHook を使用すると、Windows CPI-C 実装で、新しい関数を使用して CPI-C 関数呼び出しをブロックできます。 WinCPICSetBlockingHook を呼び出すには:

FARPROC WINAPI WinCPICSetBlockingHook (FARPROC 1pBlockFunc)  

WinCPICUnhookBlockingHook は、インストールされている以前のブロッキング フックを削除し、既定のブロッキング メカニズムを再インストールします。 WinCPICUnhookBlockingHook を呼び出すには:

BOOL WINAPI WinCPICUnhookBlockingHook (void)