Драйвер Twain - ошибка TWAINDSM.DLL в ОС Windows x64
Мы разработали приложение для управления и сканирования любого файла, такого как изображения и т. Д., В качестве приложения C# Winform, и оно успешно работает на платформе x86 OS. В приложении мы используем класс C# twain, который отправляет команду сканеру, чтобы мы могли достичь того, чего хотим. Как вы все знаете, файл Twain_32.dll используется для запуска приложения и сканирования без сбоев.
Мой вопрос в том, что на платформах x64 мы не можем запустить приложение и получить ошибку BadImageFormatException, которая пытается сообщить нам, что все дело в типе ОС! Так что эта ошибка указывает мне, что я пытаюсь запустить приложение под несовместимым типом ОС.
Я сталкивался с тем, что 32-битная библиотека Twain dll работает в системах x64, но мне попалась другая проблема. Мы запускаем все приложения в одной родительской форме, которая является родительской формой MDI. Таким образом, форма, которую я хочу использовать для сканирования, будет формой MDI Client. Итак, хотя моя программа скомпилирована как ANYCPU, CLR будет запускать ее как x64-битное приложение в Windows x64 OS. Поэтому я не могу запустить приложение, даже если я скомпилировал форму сканирования в качестве целевой платформы x86 в Win64 x64.
До сих пор, я надеюсь, вы все поняли, что я имею в виду!!!
В качестве решения я попытался установить установочный файл Twack64, чтобы получить файл TWAINDSM.dll и запустить свое приложение как на компьютерах с операционной системой x86, так и с x64. Кроме того, в моем собственном проекте с исходным кодом twain я изменил атрибут импорта dll TWAINDSM.dll вместо Twain_32.dll, но это не сработало.
Так что я что-то здесь упускаю или Twain C# приложение не распознает TWAINDSM.dll как Twain DLL? Я застрял на этом шаге и не могу идти дальше!!! дергаю за волосы 3-4 дня!!!:(
Ребята, быстрая помощь мне очень поможет! С нетерпением жду Вашего ответа!!!
1 ответ
Мы нашли другой способ, вместо того, чтобы искать TwainDSM dll для x64, который на самом деле мы не могли найти в моей компании.
Я разместил тему на twainforum по этому поводу, через некоторое время мне ответили - ссылка ниже:
TwainForum Ссылка, которую я выложил о выпуске!
ну, это не было достаточно хорошо, чтобы найти выход в то время. Прежде чем получить ответ, мы пришли к соглашению, что мы можем решить эту проблему с помощью класса 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-файла, чтобы использовать его в моем проекте? Есть способ сделать это! Просто поместите однострочный код в файл Program.cs файла FileName.Exe, как показано ниже: (Я также поставил вертикальную линию для разделения параметров)
Console.Write(FilePathAndName + "|" + PicFormArsivOK.ToString() + "|" + TarayiciFormArsivOK.ToString());
и, наконец, я прочитал значения из значения результата, как это:
if (result.Split('|').First() != "" && (Convert.ToBoolean(result.Split('|')[1]) == true | Convert.ToBoolean(result.Split('|')[2]) == true))
{
//TODO:
}
Я надеюсь, что у вас есть идея, и ответ полезен для ваших нужд!