Closed IrinaRazel closed 6 years ago
Добрый день. К описанию ошибки необходимо добавить трассировку стека. Также не помешает описание обстоятельств (кода из которого осуществляется вызов и кода, предшествующего вызову). Также Вы можете попробовать пример Saraff.Twain.Sample2.
Нашла, в чем у Вас ошибка. Вот тут Вы задаете Callback2, а по спецификации 2.3 надо Callback. Я поменяла и нормально пошло private void _RegisterCallback() { TwRC _rc=this._dsmEntry.DsInvoke(this._AppId,this._srcds,TwDG.Control,TwDAT.Callback2,TwMSG.RegisterCallback,ref _callback); } }
Однако теперь ошибка на _twain.SetCap(TwCap.SupportedSizes, TwSS.A4Letter);
"Data parameter out of range."; ReturnCode = Failure; ConditionCode = BadValue Saraff.Twain.TwainException
at Saraff.Twain.Twain32._SetCapCore(TwCapability cap, TwMSG msg) in E:\Projects\ScanHotKeyService\Saraff.Twain.NET-master\Twain32.cs:line 949 at Saraff.Twain.Twain32._SetCapCore(TwCap capability, TwMSG msg, Object value) in E:\Projects\ScanHotKeyService\Saraff.Twain.NET-master\Twain32.cs:line 970 at Saraff.Twain.Twain32.SetCap(TwCap capability, Object value) in E:\Projects\ScanHotKeyService\Saraff.Twain.NET-master\Twain32.cs:line 1012
Запускаю Saraff.Twain.Sample1 Если там выставить ShowUI = false , то вылетает ошибка DG DAT MSG out of expected sequence
Ок. Давайте почитаем спецификацию:
This triplet is sent to the DSM by the Application to register the application’s entry point with the DSM, so that the DSM can use callbacks to inform the application of events generated by the DS. The last argument is a pointer to an initialized TW_CALLBACK structure. The TW_CALLBACK structure should be initialized as follows:
This triplet is sent to the DSM by the Application to register the application’s entry point with the DSM, so that the DSM can use callbacks to inform the application of events generated by the DS. The last argument is a pointer to an initialized TW_CALLBACK2 structure. The TW_CALLBACK2 structure should be initialized as follows:
Разница в поле RefCon. В TW_CALLBACK оно всегда 32 разрядное (TW_UINT32 RefCon;) в то время как в TW_CALLBACK2 его разрядность зависит от разрядности процессора (TW_UINTPTR RefCon;). Поэтому в примечании к DG_CONTROL / DAT_CALLBACK / MSG_REGISTER_CALLBACK сказано, что необходимо избегать использования поля TW_CALLBACK.RefCon. Для устранения этой проблемы используется DG_CONTROL / DAT_CALLBACK2 / MSG_REGISTER_CALLBACK.
Поэтому Ваше утверждение "Вот тут Вы задаете Callback2, а по спецификации 2.3 надо Callback"
неверно.
Если это действительно влияет на работу сканера, то драйвер (Data Source) Вашего сканера не соответствует TWAIN Specification 2.x. Вы можете попробовать использовать режим TWAIN 1.x (на 64 разрядных ОС для этого используйте примеры с суффиксом _x86, например, Saraff.Twain.Sample2_x86.exe).
Если там выставить ShowUI = false , то вылетает ошибка DG DAT MSG out of expected sequence
Повторюсь:
К описанию ошибки необходимо добавить трассировку стека.
Однако теперь ошибка на _twain.SetCap(TwCap.SupportedSizes, TwSS.A4Letter); "Data parameter out of range."; ReturnCode = Failure; ConditionCode = BadValue Saraff.Twain.TwainException
Вероятно Вы используете недопустимое значение. Попробуйте вначале получить список поддерживаемых значений используя _twain32.Capabilities.SupportedSizes.Get() (см. Strongly typed accessing to a capabilities). А Также, проверьте поддерживается ли используемая Вами возможность (_twain32.Capabilities.SupportedSizes.IsSupported())
к ShowUI = false
в Saraff.Twain.Twain32._EnableDataSource() в E:\Projects\ScanHotKeyService\Saraff.Twain.NET-master\Twain32.cs:строка 264 в Saraff.Twain.Twain32.Acquire() в E:\Projects\ScanHotKeyService\Saraff.Twain.NET-master\Twain32.cs:строка 282 в Saraff.Twain.Sample1.Form1.button1_Click(Object sender, EventArgs e) в E:\Projects\ScanHotKeyService\Saraff.Twain.Samples\sources\Saraff.Twain.Sample1\Form1.cs:строка 73
Вероятно Вы используете недопустимое значение.
Да, так и есть. А список этих значений зависит от используемого сканера? Просто я пытаюсь оттестировать на виртуальном сканере, т.к. иных нет http://developer.dynamsoft.com/dwt/kb/2659
Вероятно, используемый Вами драйвер (Data Source) сканера не может работать без отображения пользовательского интерфейса.
Вероятно, используемый Вами драйвер (Data Source) сканера не может работать без отображения пользовательского интерфейса.
А вот это наврятли, я сперва ставила библиотеку от asprise и она нормально отработала без интерфейса...
Попробуйте TWAIN sample Data Source или Saraff.Twain.DS.Screen в качестве виртуального сканера.
TWAIN sample Data Source оно и есть http://developer.dynamsoft.com/dwt/kb/2659 во всяком случае инсталлер пишет, что уже такое есть
Еще в процессе сканирования выводит в консоль Qt: Could not initialize OLE (error 80010106) Exception при этом не выпадает
Возникает где-то тут private bool _DisableDataSource()
Все примеры (образцы кода) были проверены в т.ч. с помощью TWAIN sample Data Source (см. раздел Samples документации). (С отображением UI сканера и без него, в 32 и 64 разрядных приложениях). Поэтому, если у Вас возникли проблемы при работе примеров (образцов кода) с TWAIN sample Data Source, то вероятнее всего он (TWAIN sample Data Source) неправильно настроен и/или поврежден. (При условии отсутствия изменений в коде примеров, внесенных Вами)
Все же есть проблемы, я запустила на другом ПК и DSM вообще не может запустить. Я установила два виртуальных принтера, 32 и 64 битные. Приложение TWAIN Sample APP видит только 32 битный... Все файлы dll проверила, все на своих местах... понять не могу, в чем проблема... есть идеи? Windows Server 2012 R2 На Windows 7 нормально все
Добрый день.
Не совсем ясно, что значит "DSM вообще не может запустить"
, причем тут "Приложение TWAIN Sample APP"
и "два виртуальных принтера"
.
Какие файлы Вы проверили (имя файла, версия и полный путь к файлу)?
Проверьте наличие TWAINDSM.dll версии 2.3 (32 и 64 бит) см. Installation of the Data Source Manager. А также наличие драйвера (Data Source) сканера (32 и 64 бит).
Доброго времени суток.
Вызываю так:
_twain.CloseDataSource(); _twain.SelectSource(); _twain.OpenDataSource();
и выходит ошибка Unrecognized MSG DG DAT combination