共用方式為


WIA-TWAIN 相容性

如果裝置可以有兩個或多個驅動程式,請徹底測試這些驅動程式彼此之間的相容性。 例如,如果一個驅動程式讓裝置處於無法使用的狀態 (,例如驅動程式未在某些通訊協定中傳送關閉會話訊息) ,則另一個驅動程式在嘗試與裝置通訊時可能會失敗。 這種情況經常發生在串行設備上。

WIA 和 TWAIN 位於相同 DLL 中

如果您同時從單一 DLL 執行 WIA 驅動程式和 TWAIN 驅動程式,WIA 服務和 TWAIN 應用程式都會載入此 DLL 的實例。 DLL 的 WIA 實例會建置 WIA 專案樹狀結構。 此樹狀結構代表相機上的資料夾和影像。 任何使用 WIA 的應用程式(例如我的電腦或掃描與相機精靈)都會在驅動程式中具有項目樹狀結構的複本。

透過 TWAIN 驅動程式刪除或新增映像時,WIA 驅動程式不會收到此變更的通知。 因此,WIA 項目樹狀結構會包含已刪除的圖片,或不包含已新增的圖片。 在任一情況下,驅動程式都必須重新整理其專案樹狀結構。 若要這樣做,TWAIN 驅動程式必須指示 WIA 驅動程式在新增或刪除映像時重新整理其項目樹狀結構。

其中一種方式是從 TWAIN 驅動程式呼叫 CoCreateInstance(CLSID_IWiaDevMgr,...) 、列舉所有裝置,然後搜尋您的裝置。 透過此列舉來識別驅動程式的其中一種方式是在 WIA 驅動程式中建立自定義屬性,以便如果 TWAIN 驅動程式查詢此屬性且它存在,您會知道它是您的 WIA 驅動程式。 擁有驅動程式的 IWiaItem 之後,請將命令傳送至驅動程式以重建其樹狀結構,例如,在呼叫 IWiaItem::DeviceCommand 方法時傳送 WIA CMD_SYNCHRONIZE 命令。 CoCreateInstanceIWiaDevMgrIWiaItem 會在 Microsoft Windows SDK 檔中說明。

重新整理 WIA 專案樹狀結構的另一種方式是在 WIA 驅動程式中建立具名 事件 。 然後,WIA 驅動程式中的執行緒可以等候此事件發出訊號。 每當您透過 TWAIN 驅動程式刪除或新增映像時,TWAIN 驅動程式都會在此具名事件上發出訊號 (呼叫 SetEvent (在 Windows SDK 檔中所述) 。 然後會釋放 WIA 驅動程式中的執行程,而 WIA 驅動程式會重建樹狀結構。

無論哪種方式,您都應該重建樹狀結構,以便它反映對相機或掃描器上實際影像所做的任何變更。 請確保每當您透過在項目樹中新增或刪除項目來更新樹狀結構時,您都會排程事件(例如,WIA_EVENT_ITEM_DELETED 或 WIA_EVENT_TREE_UPDATED(如需這些和其他 WIA 事件識別碼的詳細資訊,請參閱 Windows SDK 文件))。 如果您在樹狀結構變更時成功傳送事件,這將解決「我的電腦」和其他 WIA 應用程式未自動更新的問題。

注意 雖然您的 TWAIN 和 WIA 驅動程式可能存在於相同的 DLL 中,但 WIA 和 TWAIN 驅動程式無法共用相同的 UI。 每個驅動程式都必須有自己的 UI。