winforms Twain驱动程序-Windows操作系统x64中的TWAINDSM.DLL错误

btxsgosb  于 2022-12-23  发布在  Windows
关注(0)|答案(1)|浏览(402)

我们开发了一个应用程序来控制和扫描任何文件,如图像等,作为一个C# Winform应用程序,它成功地在x86操作系统平台下工作。在应用程序中,我们使用C# twain类发送命令给扫描仪,所以我们可以实现我们想要的。正如大家所知,Twain_32.dll文件是用来运行应用程序和扫描没有失败。
我的问题是,在x64操作系统平台上,我们无法运行应用程序,并得到一个名为*BadImageFormatException*的错误,试图告诉我们这一切都与操作系统类型有关!所以这个错误指向我,我试图在不兼容的操作系统类型下运行应用程序。
我有经验的32位twain dll工作在x64系统下,但另一个问题交叉我的方式。我们运行我们的所有应用程序下的一个父窗体是MDI父窗体。所以,我想使用的窗体作为扫描目的将是一个MDI客户端窗体。所以好吧,虽然我的程序编译为*ANYCPU***,*CLR*将在Windows x64操作系统中作为x64位应用程序运行。这就是为什么,即使我在x64 Win操作系统中将扫描表单编译为x86平台目标,我也无法运行该应用程序。
直到这里,我希望你们都明白我的意思!
作为一个解决方案,我尝试安装*Twack 64*安装文件,以获得TWAINDSM.dll文件,并在x86和x64操作系统机器上运行我的应用程序。此外,在我的自定义twain源代码项目中,我更改为dll导入属性
TWAINDSM.dll
而不是
Twain_32.dll
,但它没有工作。
那么,我错过了一些东西在这里或吐温C#应用程序不承认
TWAINDSM.dll**作为吐温dll?我被困在这一步,无法前进任何进一步!!!拉我的头发3-4天!!:(
一个快速的手将是很大的帮助,我的家伙!期待着您的消息!!!

jxct1oxe

jxct1oxe1#

我们已经找到了另一种方法,而不是寻找TwainDSM dll的x64,我们不能实际上在我的公司。
我已经发布了一个主题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());

最后我从result value中读取值,如下所示:

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

我希望你在这里得到的想法和答案是有用的为您的需要!

相关问题