c# - Twain驱动程序-Windows OS x64中的TWAINDSM.DLL错误

我们开发了一个应用程序来控制和扫描任何文件,例如图像等,如C#Winform App,它可以在x86 OS平台上成功运行。在应用程序中,我们使用C#twain类向扫描器发送命令,从而实现所需的功能。
众所周知,Twain_32.dll文件用于运行应用程序并进行扫描而不会失败。

我的问题是,在x64 OS平台上,我们无法运行该应用程序,并得到一个名为BadImageFormatException的错误,该错误试图告诉我们所有有关OS类型的信息!所以这个错误指出我尝试在不兼容的OS类型下运行该应用程序。

我已经体验到32位twain dll在x64系统下工作,但是另一个问题困扰着我。
我们在一个父表单(即MDI父表单)下运行所有​​应用程序。因此,我要用作扫描目的的表单将是MDI客户表单。很好,当我的程序编译为ANYCPU时,CLR将在Windows x64 OS中将其作为x64位应用程序运行。
这就是为什么即使我将扫描表单编译为x64 Win OS中的x86平台目标也无法运行该应用程序的原因。

直到这里,我希望你们都明白我的意思!!!

作为解决方案,我尝试安装Twack64安装文件以获取TWAINDSM.dll文件并在x86和x64 OS计算机上运行我的应用程序。
另外,在我的自定义twain源项目中,我将dll导入属性TWAINDSM.dll替换为Twain_32.dll,但没有成功。

那么,我是否在这里丢失了某些内容,或者Twain C#应用程序无法将TWAINDSM.dll识别为twain dll?
我被困在这一步,无法继续前进!!!拉我的头发3-4天!!! :(

快速的手将对我大有帮助!
期待您的回音!!!

最佳答案

我们找到了另一种方法,而不是为x64寻找TwainDSM dll,这实际上是我公司内部无法做到的。

经过一段时间的回复后,我已经在twainforum上发布了一个主题,其链接如下:

TwainForum Link That I posted about the issue!

好吧,当时还不足以找到我的出路。
在得到答案之前,我们已经达成协议,可以使用System.Diagnostics.Process类来解决此问题,以便根据需要在x64平台上工作。我使用的代码如下:

        var proc = new System.Diagnostics.Process();
        String path = "";
        var pathArray = System.Windows.Forms.Application.StartupPath.Split('\\');
        for (int i = 0; i < pathArray.Count() - 1; i++)
        {
            path += pathArray[i] + "\\";
        }
        path = path + "fileName.EXE";
        proc.StartInfo.FileName = path;
        proc.StartInfo.RedirectStandardOutput = true;
        proc.StartInfo.UseShellExecute = false;

        proc.Start();
        string result = proc.StandardOutput.ReadToEnd();
        proc.WaitForExit();
        if (string.IsNullOrEmpty(result))
        {
            MessageBox.Show("No Response from Scanner Screen!", "ERROR!");
            return;
        }


但是如何从该exe传递参数以在我的项目中使用它?有一种方法可以做到!只需在FileName.Exe的Program.cs文件中放入一行代码,如下所示:(我也将竖线用于单独的参数)

Console.Write(FilePathAndName + "|" + PicFormArsivOK.ToString() + "|" + TarayiciFormArsivOK.ToString());


最后我从结果值中读取值,如下所示:

 if (result.Split('|').First() != "" && (Convert.ToBoolean(result.Split('|')[1]) == true | Convert.ToBoolean(result.Split('|')[2]) == true))
        {
          //TODO:  
        }


希望您在这里有了主意,答案对您的需求很有用!

本文翻译自 https://stackoverflow.com/questions/30156993/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 c# winforms scanning twain twaindotnet


相关文章:

c# - .NET扫描API [关闭]

java - 扫描图像成可读文本

c# - .NET BCL中的跟踪与调试

c# - 带有OpenRasta和ASP.NET MVC的REST API

android - 尝试重新扫描音频文件

c# - 从System.Threading.Timer在UI中调用时,如何避免泄漏句柄?

c++ - MFC应用程序:从窗体按钮启动一个(模式)对话框

c# - UC中的派生类给出“两个dll中都存在类型”错误

c# - WPF DataGrid:如何自动将空值替换为“ n / a”?

c# - 对象数据绑定C#WinForms无法正常工作