Twain Driver - TWAINDSM.DLL Windows OS x64 中的错误

Twain Driver - TWAINDSM.DLL Error in Windows OS x64

我们开发了一个应用程序来控制和扫描图像等任何文件作为 C# Winform 应用程序,它在 x86 OS 平台下成功运行。在应用程序中,我们使用 C# twain class 向扫描仪发送命令,这样我们就可以实现我们想要的。 众所周知,Twain_32.dll文件用于运行应用程序并扫描无故障。

我的问题是,在 x64 OS 平台中,我们无法 运行 应用程序并收到名为 BadImageFormatException[ 的错误=41=] 试图告诉我们这都是关于 OS 类型的!所以这个错误指出我尝试 运行 不兼容 OS 类型下的应用程序。

我曾体验过 32 位 twain dll 在 x64 系统下的工作,但我遇到了另一个问题。 我们 运行 我们的所有应用程序都采用一种 parent 形式,即 MDI Parent 形式。所以我想用作扫描目的的表单将是一个 MDI 客户端表单。好吧,虽然我的程序被编译为 ANYCPUCLR 将 运行 它作为 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 上发布了一个关于它的主题,一段时间后我得到了答案 - link 如下:

TwainForum Link That I posted about the issue!

嗯,当时想出路还不够好。 在得到答案之前,我们达成协议,我们可以根据需要使用 System.Diagnostics.Process class 在 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:  
        }

我希望你在这里明白了,答案对你的需求有用!