迷你驅動程式函式的呼叫順序
啟動迷你驅動程式時,它會呼叫一些較舊的 STI 進入點,例如 IStiUSD::Initialize 和 IStiUSD::GetStatus。 一旦第一個應用程式嘗試與裝置通訊,WIA 服務就會呼叫 IWiaMiniDrv::d rvInitializeWia。 此函式中,迷你驅動程式應該建構專案樹狀結構。
WIA 服務會針對樹狀結構中的每個專案呼叫 IWiaMiniDrv::d rvInitItemProperties 。 迷你驅動程序應該建立與項目相關的所有屬性。 在某些情況下,建立空白屬性並稍後填入其數據可能很明智。 例如,為了提升效能,只有在 WIA 服務特別要求時,才會讀取相機上的影像縮圖,如下所述。
要呼叫的下一個函式取決於應用程式和裝置類型。 一般而言,應用程式最常見的作業是傳輸數據。 針對掃描器,應用程式會先設定屬性 (例如數據類型和範圍) ,定義想要從裝置取得的影像。 WIA 服務會在應用程式變更任何屬性時呼叫 IWiaMiniDrv::d rvValidateItemProperties 。 迷你驅動程式應該檢查屬性是否有效,並視需要與裝置通訊。 迷你驅動程式通常應該避免在該函式中設定屬性,因為另一個應用程式可以在數據傳輸發生之前,將屬性設定為不同的值。
為了傳輸數據,WIA 服務會依該順序呼叫 IWiaMiniDrv::d rvLockWiaDevice、 IWiaMiniDrv::d rvWriteItemProperties、 IWiaMiniDrv::d rvAcquireItemData 和 IWiaMiniDrv::d rvUnLockWiaDevice。 鎖定和解除鎖定裝置的呼叫保證在傳輸期間不會有其他應用程式存取裝置。 針對掃描器, IWiaMiniDrv::d rvWriteItemProperties 應該將位置、範圍和解析度等屬性傳送至裝置。 相機驅動程式通常不需要將任何屬性傳送至裝置。 IWiaMiniDrv::d rvAcquireItemData 應該從裝置擷取映像數據,並使用 IWiaMiniDrvCallback COM 介面,透過 WIA 服務將它傳回應用程式。
對於相機,如果應用程式想要顯示影像的縮圖,WIA 服務會呼叫每個影像上的 IWiaMiniDrv::d rvReadItemProperties 。 迷你驅動程式應該會在該時間點讀取縮圖,並在驅動程式項目內容中快取它。 請務必快取縮圖,因為多個應用程式可能會要求縮圖,導致 多次呼叫IWiaMiniDrv::d rvReadItemProperties。 如果迷你驅動程式每次應用程式要求時讀取縮圖,效能就會受到影響。
相機的另一個特別考慮是會影響相機設定的根項目屬性,例如 (快門速度,例如) 。 當應用程式變更這些屬性時,WIA 服務會呼叫 IWiaMiniDrv::d rvValidateItemProperties。 迷你驅動程式可以視需要與相機通訊,以驗證屬性設定。 不過,此函式不是變更相機上設定的最佳位置,因為另一個應用程式也可以變更屬性。 當呼叫 IWiaMiniDrv::d rvDeviceCommand 函式以擷取新影像時,迷你驅動程式應該會從根專案屬性更新所有相機設定。