使用 IStiUSD 逸出方法
系統會呼叫 IStiUSD::Escape方法,將資訊直接傳遞至硬體。 只有在 Windows XP 和更新版本的作業系統上才支援這個方法。
TWAIN 相容應用程式與 WIA 驅動程式之間的所有通訊都會先前往資料來源管理員 (twain_32.dll) ,進而呼叫 TWAIN 相容性層 (wiadss.dll) 。 TWAIN 相容性層接著會呼叫 WIA 驅動程式的 IStiUSD::Escape 方法,並將下列兩個逸出程式碼之一傳遞至 方法:
ESC_TWAIN_PRI加值稅E_SUPPORTED_CAPS逸出程式碼
當 TWAIN 應用程式要求 WIA 驅動程式的私人功能清單時,TWAIN 相容性層會呼叫驅動程式的 IStiUSD::Escape 方法,並在呼叫中傳遞ESC_TWAIN_PRI加值稅E_SUPPORTED_CAPS。 如果驅動程式不支援傳遞功能,它會傳回 TWAIN 相容性層的靜態 (預設) 功能清單。 否則,驅動程式會將支援的私用功能清單傳回 TWAIN 相容性層。
當 TWAIN 應用程式傳送尚未在 TWAIN 相容性層預設清單中的功能作業時,TWAIN 相容性層會呼叫驅動程式的 IStiUSD::Escape 方法,這次會在呼叫中傳遞ESC_TWAIN_CAPABILITY。
不過,上述說明有點過於簡單。 當 TWAIN 應用程式要求驅動程式的私人功能清單時,TWAIN 相容性層實際上會對驅動程式的 IStiUSD::Escape 方法進行兩次呼叫。 在第一次呼叫中,TWAIN 相容性層會詢問 WIA 驅動程式儲存功能清單所需的記憶體量。 TWAIN 相容性層接著會配置該數量的記憶體,以供 WIA 驅動程式使用。 第二個呼叫中,TWAIN 相容性層會要求 WIA 驅動程式提供功能清單,WIA 驅動程式會複製到先前提及的記憶體中。 TWAIN 相容性層負責配置和釋放 TWAIN-WIA 交易中使用的所有記憶體。 這種安排可防止 WIA 驅動程式釋放 TWAIN 相容性層所使用的記憶體。
TWAIN 相容性層也會在傳遞ESC_TWAIN_CAPABILITY並取得功能時,呼叫驅動程式的 IStiUSD::Escape 方法兩次。 第一次呼叫會詢問 WIA 驅動程式儲存功能所需的記憶體,而第二次呼叫會傳回功能。 請注意,SET 功能作業只需要單一呼叫 IStiUSD::Escape,因為不需要配置記憶體。
所有 IStiUSD::Escape方法的呼叫都應該依下列順序進行驗證:
驗證 EscapeFunction 函 式程式碼。 如果無效,請立即失敗。 這可防止在驅動程式中處理不正確的程式碼。
驗證傳入緩衝區 lpInData。 如果無效,請立即失敗。 不正確傳入緩衝區可能會導致 WIA 驅動程式當機。
驗證傳出緩衝區 pOutData。 如果無效,請立即失敗。 如果驅動程式無法藉由寫入必要的資料來完成要求,則不需要處理該資料。
驗證傳出緩衝區的大小。 如果驅動程式無法將正確的資料量寫入傳出緩衝區,則呼叫端無法正確處理該資料。
下列各節中的程式碼範例說明如何使用傳遞功能,以支援具有私人功能的 TWAIN 應用程式。 程式碼範例會使用在標頭檔 wiatwcmp.h中定義的兩個逸出程式碼,ESC_TWAIN_PRI加值稅E_SUPPORTED_CAPS 和 ESC_TWAIN_CAPABILITY。