Windows 的 CPI-C考量

本主題摘要說明當您根據 Windows 作業系統開發程式時,應該記住的資訊。

使用訊息張貼的非同步完成通知
當非同步作業完成時,應用程式視窗 hwndNotify 會接收 RegisterWindowMessage 傳回的訊息,並以 "WinAsyncCPIC" 做為輸入字串。 WParam值包含正在完成之作業的conversation_return_code 。 其值取決於最初發出的作業。 IParam引數包含原始函式呼叫中所指定之conversation_ID的 CM_PTR。

使用 Win32®事件非同步完成通知
當動詞命令發出于非封鎖的對話時,如果是要以非同步方式完成,就會傳回 CM_OPERATION_INCOMPLETE。 如果事件已向交談註冊,應用程式可以呼叫 WaitForSingleObjectWaitForMultipleObjects ,以在動詞命令完成時收到通知。 WinCPICExtractEvent 可讓 (CPI-C) Applicationto 的一般程式設計介面判斷此事件處理常式。 當動詞命令完成之後,應用程式必須呼叫 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 型進程的布建。 處理常式包含一或多個執行中的執行緒。 所有線程參考都會參考多執行緒 Windows 環境中的實際執行緒。

包裝
基於效能考慮,不會封裝 Vcb。 如此一來,dword 會在 DWORD 界限、單字上單字和位元組(位元組)上。 Vcb 應該使用提供的結構來存取。

執行時間連結
若要在執行時間將 TP 動態連結至 CPI,TP 必須發出:

  • LoadLibrary 可動態載入 WINCPIC.DLL 或 WINCPIC32.DLL 程式庫以進行 WINCPIC。

  • GetProcAddress 將 WINCPIC 指定為動態連結程式庫 (DLL) 所需的進入點。

  • 如果不再需要 CPI C 程式庫,請FreeLibrary

    同時交談
    程式可同時參與每個進程的64個交談。

    終止應用程式
    在 Windows 作業系統中,CPI C 無法分辨應用程式何時終止。 因此,如果應用程式必須關閉 (例如,它會收到來自使用者) 的 ALT + F4 結果 WM_CLOSE 訊息,則應用程式應該呼叫 WinCPICCleanup

    對其他元件產生
    在處理 CPI C 和一般服務動詞 (CSV) 時,程式庫程式碼可能需要產生,才能讓另一個元件(例如 SnaBase)接收訊息並將訊息傳遞至應用程式。 您可以使用 Windows extensions WinCPICSetBlockingHookWinCPICUnhookBlockingHook來完成這項作業。

    WinCPICSetBlockingHook可讓 Windows cpi-c 實作為透過新函式來封鎖 CPI 的函式呼叫。 若要呼叫 WinCPICSetBlockingHook

FARPROC WINAPI WinCPICSetBlockingHook (FARPROC 1pBlockFunc)  

WinCPICUnhookBlockingHook 會移除任何先前已安裝的封鎖攔截,並重新安裝預設封鎖機制。 若要呼叫 WinCPICUnhookBlockingHook

BOOL WINAPI WinCPICUnhookBlockingHook (void)