Udostępnij przez


Używanie metody uniku IStiUSD

Metoda IStiUSD::Escape jest wywoływana w celu przekazania informacji bezpośrednio do sprzętu. Ta metoda jest obsługiwana tylko w systemach operacyjnych Windows XP i nowszych.

Cała komunikacja między aplikacją zgodną ze standardem TWAIN a sterownikiem WIA jest najpierw kierowana do menedżera źródła danych (twain_32.dll), który z kolei wywołuje warstwę zgodności TWAIN (wiadss.dll). Warstwa zgodności TWAIN następnie wywołuje metodę IStiUSD::Escape sterownika WIA i przekazuje do niej jeden z następujących dwóch kodów ucieczki:

ESC_TWAIN_CAPABILITY kod ucieczki

ESC_TWAIN_PRIVATE_SUPPORTED_CAPS kod ucieczki

Gdy aplikacja TWAIN żąda prywatnej listy możliwości sterownika WIA, warstwa zgodności TWAIN wywołuje metodę IStiUSD::Escape sterownika, przekazując ESC_TWAIN_PRIVATE_SUPPORTED_CAPS w wywołaniu. Jeśli sterownik nie obsługuje funkcji przekazywania, zwraca statyczną (domyślną) listę możliwości warstwy zgodności TWAIN. W przeciwnym razie sterownik zwraca listę obsługiwanych funkcji prywatnych do warstwy zgodności TWAIN.

Gdy aplikacja TWAIN wysyła operację możliwości, która nie znajduje się jeszcze na domyślnej liście warstwy zgodności TWAIN, warstwa zgodności TWAIN wywołuje metodę IStiUSD::Escape sterownika, tym razem przekazując ESC_TWAIN_CAPABILITY w wywołaniu.

Jednak powyższe wyjaśnienie jest nieco uproszczone. Gdy aplikacja TWAIN pyta o listę funkcji prywatnych sterownika, warstwa zgodności TWAIN rzeczywiście wykonuje dwa wywołania metody IStiUSD::Escape sterownika. Podczas pierwszego wywołania warstwa zgodności TWAIN pyta sterownik WIA, ile pamięci jest potrzebne do przechowania listy możliwości. Następnie warstwa zgodności TWAIN przydziela tę ilość pamięci dla sterownika WIA do użycia. W drugim wywołaniu warstwa zgodności TWAIN prosi sterownik WIA o listę możliwości, którą sterownik WIA kopiuje do wcześniej wymienionej pamięci. Warstwa zgodności TWAIN jest odpowiedzialna za przydzielanie i zwalnianie całej pamięci używanej w transakcjach TWAIN-WIA. To rozwiązanie uniemożliwia sterownikowi WIA zwalnianie pamięci używanej przez warstwę zgodności TWAIN.

Warstwa zgodności TWAIN wywołuje również metodę IStiUSD::Escape sterownika dwa razy po przekazaniu ESC_TWAIN_CAPABILITY, w którym celem jest uzyskanie zdolności. Pierwsze wywołanie pyta sterownik WIA, ile pamięci potrzebuje, aby przechować tę funkcję, a drugie wywołanie zwraca tę funkcję. Należy pamiętać, że operacje funkcji SET wymagają tylko jednego wywołania funkcji IStiUSD::Escape, ponieważ nie trzeba przydzielać pamięci.

Wszystkie wywołania metody IStiUSD::Escape powinny zostać zweryfikowane w następującej kolejności:

  1. Zweryfikuj kod funkcji EscapeFunction . Jeśli jest nieprawidłowy, zakończ się niepowodzeniem natychmiast. Zapobiega to przetwarzaniu nieprawidłowych kodów w sterowniku.

  2. Zweryfikuj bufor przychodzący lpInData. Jeśli jest nieprawidłowy, zakończ działanie natychmiast. Nieprawidłowe przychodzące bufory mogą spowodować awarię sterownika WIA.

  3. Zweryfikuj bufor wychodzący pOutData. Jeśli jest nieprawidłowy, natychmiast zakończ działanie. Jeśli sterownik nie może ukończyć żądania, zapisując niezbędne dane, nie musi przetwarzać tych danych.

  4. Zweryfikuj rozmiar buforu wychodzącego. Jeśli sterownik nie może zapisać poprawnej ilości danych do buforu wychodzącego, obiekt wywołujący nie może prawidłowo przetworzyć tych danych.

Przykłady kodu w poniższych sekcjach ilustrują użycie funkcjonalności pass-through, który obsługuje aplikacje TWAIN z funkcjami prywatnymi. Przykłady kodu używają dwóch kodów ucieczki zdefiniowanych w pliku nagłówka wiatwcmp.h, ESC_TWAIN_PRIVATE_SUPPORTED_CAPS i ESC_TWAIN_CAPABILITY.

kod ucieczki ESC_TWAIN_PRIVATE_SUPPORTED_CAPS

kod ucieczki ESC_TWAIN_CAPABILITY