Windows の CPI-C に関する考慮事項

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

メッセージの投稿を使用した非同期完了通知
非同期操作が完了すると、アプリケーション ウィンドウ hwndNotify は、 RegisterWindowMessage によって返されたメッセージを、入力文字列として "WinAsyncCPIC" と共に受信します。 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、BYTEs 上の BYTEs に存在します。 VCB には、指定された構造体を使用してアクセスする必要があります。

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

  • WINCPIC のライブラリWINCPIC.DLLまたはWINCPIC32.DLLを動的に読み込むための LoadLibrary

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

  • 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)