Использование пакета NTwain nuget в 64-битной версии - PullRequest
0 голосов
/ 20 сентября 2018

Я нашел здесь учебник по использованию NTWain для сканирования документов в C # WPF.

Я попробовал решение в пустом projet x86, оно хорошо работает.

Теперь я попытался использовать это решение в своем проекте x64.Сначала у меня возникли проблемы с twainDSM.dll, поэтому я скачал версию x64.

Теперь проект работает, но в моем списке нет сканера.

В коде есть:

public TwainCore()
{
    //Allow old Device DSM drives
    PlatformInfo.Current.PreferNewDSM = false;

    var appId = TWIdentity.CreateFromAssembly(DataGroups.Image | DataGroups.Audio, Assembly.GetExecutingAssembly());
    _twainSession = new TwainSession(appId);

    PlatformInfo.Current.PreferNewDSM = false;

    _twainSession.TransferReady += _twainSession_TransferReady;
    _twainSession.StateChanged += _twainSession_StateChanged;

    if (_twainSession.Open() != ReturnCode.Success)
        throw new InvalidProgramException("Erreur de l'ouverture de la session");
}

Я смотрел оба:

  • В x86 _twainSession._ownedSources.Count = 1

  • В x64 _twainSession._ownedSources.Count = 0

Так почему в моем проекте x64 не найден сканер?

1 Ответ

0 голосов
/ 13 октября 2018

64-битный TWAIN DSM работает только с 64-битными источниками данных, и большинство сканеров предоставляют только 32-битные источники данных.Поэтому вам нужно будет использовать 32-битный DSM.

У вас есть два варианта:

  • Запустить приложение в 32-битном режиме
  • Использовать дочерний процесскоторый работает в 32-битном режиме

Что касается последнего, см. этот вопрос .Вы также можете посмотреть на NAPS2 (автором которого я являюсь), который использует WCF через именованный канал для связи с рабочим процессом.

Обратите внимание, что WIA (альтернатива TWAIN) неУ меня нет этой проблемы, потому что Windows включает 64-битный слой перевода, который делает эту работу за вас.Тем не менее, у него есть и другие недостатки (например, худшая поддержка фидеров).

...