IStiUSD 이스케이프 메서드 사용
IStiUSD::Escape 메서드는 하드웨어에 직접 정보를 전달하기 위해 호출됩니다. 이 방법은 Windows XP 이상 운영 체제에서만 지원됩니다.
TWAIN 호환 애플리케이션과 WIA 드라이버 간의 모든 통신은 먼저 데이터 원본 관리자(twain_32.dll)로 이동하며, 이 관리자는 TWAIN 호환성 계층(wiadss.dll)을 호출합니다. 그런 다음 TWAIN 호환성 계층은 WIA 드라이버의 IStiUSD::Escape 메서드를 호출하고 다음 두 이스케이프 코드 중 하나를 메서드에 전달합니다.
ESC_TWAIN_PRIVATE_SUPPORTED_CAPS 이스케이프 코드
TWAIN 애플리케이션이 WIA 드라이버의 개인 기능 목록을 요청하면 TWAIN 호환성 계층은 드라이버의 IStiUSD::Escape 메서드를 호출하여 호출에 ESC_TWAIN_PRIVATE_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_PRIVATE_SUPPORTED_CAPS 및 ESC_TWAIN_CAPABILITY 정의된 두 개의 이스케이프 코드를 사용합니다.