在64位中使用NTwain nuget软件包

时间:2018-09-20 12:00:36

标签: c# wpf twain

我发现here是使用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 :(得分:1)

64位TWAIN DSM仅适用于64位数据源,大多数扫描仪仅提供32位数据源。因此,您将需要使用32位DSM。

您有两个选择:

  • 以32位模式运行您的应用程序
  • 使用以32位模式运行的子进程

对于后者,请参见this question。您还可以查看NAPS2(我是作者),该人在命名管道上使用WCF与工作进程通信。

请注意,WIA(TWAIN的替代方法)不存在此问题,因为Windows包括64位至32位转换层,可以为您完成此工作。但是,它还有其他缺点(例如对支线的支持更差)。