WIA-TWAIN 호환성
디바이스에 두 개 이상의 드라이버가 있을 수 있는 경우 이러한 드라이버를 철저히 테스트하여 서로 호환되는지 테스트합니다. 예를 들어 한 드라이버가 디바이스를 사용할 수 없는 상태로 두면(예: 드라이버가 일부 프로토콜에서 닫기 세션 메시지를 보내지 않음) 디바이스와 통신하려고 할 때 다른 드라이버가 실패할 수 있습니다. 이 상황은 직렬 디바이스에서 자주 발생합니다.
동일한 DLL의 WIA 및 TWAIN
WIA 드라이버와 TWAIN 드라이버를 단일 DLL에서 동시에 실행하는 경우 WIA 서비스와 TWAIN 애플리케이션은 모두 이 DLL의 instance 로드합니다. DLL의 WIA instance WIA 항목 트리를 빌드합니다. 이 트리는 카메라의 폴더와 이미지를 나타냅니다. WIA를 사용하는 모든 애플리케이션(예: 내 컴퓨터 또는 스캐너 및 카메라 마법사)에는 드라이버에 항목 트리의 복사본이 있습니다.
TWAIN 드라이버를 통해 이미지를 삭제하거나 추가하면 WIA 드라이버에 이 변경 내용에 대한 알림이 표시되지 않습니다. 따라서 WIA 항목 트리에는 삭제된 이미지가 포함되거나 추가된 이미지가 포함되지 않습니다. 두 경우 모두 드라이버는 항목 트리를 새로 고쳐야 합니다. 이렇게 하려면 이미지가 추가되거나 삭제되면 TWAIN 드라이버가 WIA 드라이버에 항목 트리를 새로 고치도록 명령해야 합니다.
이 작업을 수행하는 한 가지 방법은 TWAIN 드라이버에서 CoCreateInstance(CLSID_IWiaDevMgr,...)를 호출하고, 모든 디바이스를 열거하고, 디바이스를 검색하는 것입니다. 이 열거형을 통해 드라이버를 식별하는 한 가지 방법은 WIA 드라이버에서 사용자 지정 속성을 만들어 TWAIN 드라이버가 이 속성에 대해 쿼리하고 있는 경우 WIA 드라이버임을 알 수 있도록 하는 것입니다. 드라이버에 대한 IWiaItem이 있으면 해당 트리를 다시 빌드하는 명령을 드라이버에 보냅니다(예: IWiaItem::D eviceCommand 메서드)에 대한 호출에서 WIA CMD_SYNCHRONIZE 명령을 보냅니다. CoCreateInstance, IWiaDevMgr 및 IWiaItem은 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가 있어야 합니다.