AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein DelphiTwain findet keine Geräte in Delphi 10.1 - in XE4 alles ok
Thema durchsuchen
Ansicht
Themen-Optionen

DelphiTwain findet keine Geräte in Delphi 10.1 - in XE4 alles ok

Ein Thema von mts · begonnen am 7. Jan 2022 · letzter Beitrag vom 9. Jan 2022
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
mts

Registriert seit: 14. Dez 2008
24 Beiträge
 
Delphi XE4 Professional
 
#1

DelphiTwain findet keine Geräte in Delphi 10.1 - in XE4 alles ok

  Alt 7. Jan 2022, 11:35
Hallo zusammen,

Habe hier ein ganz verrücktes Problem.
Ich nutze DelphiTwain schon seit geraumer Zeit.
Jetzt habe ich eine Anwendung von XE4 auf Delphi 10.1 migriert und delphiTwain findet keine Scanner mehr.

Habe daraufhin einfach die Sample-Anwendung (DelphiTwainDemo2) kompiliert. In Delphi XE4 werden sofort die Scanner angezeigt, in Delphi 10.1 keine.
- Beides 32bit Anwendungen
- LoadLibrary läd in beiden Fällen erfolgreich die gleiche dll (c:\windows\TWAIN_32.DLL)

Das Problem tritt in der Methode "TCustomDelphiTwain.EnumerateDevices()" auf.
Delphi XE4:
Code:
    CallRes := TwainProc(AppInfo, nil, DG_CONTROL, DAT_IDENTITY,
      MSG_GETFIRST, @NewSource.Structure);

>>   CallRes = 0
Delphi 10.1:
Code:
    CallRes := TwainProc(AppInfo, nil, DG_CONTROL, DAT_IDENTITY,
      MSG_GETFIRST, @NewSource.Structure);

>>   CallRes = 1
Hat irgendjemand eine Idee oder evtl. das gleiche Problem schon gehabt?
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.825 Beiträge
 
Delphi 12 Athens
 
#2

AW: DelphiTwain findet keine Geräte in Delphi 10.1 - in XE4 alles ok

  Alt 7. Jan 2022, 11:49
Hallo,

wofür steht denn der Fehlercode 1?

Grüße
TurboMagic
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin
Online

Registriert seit: 15. Sep 2008
Ort: Dubai
617 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: DelphiTwain findet keine Geräte in Delphi 10.1 - in XE4 alles ok

  Alt 7. Jan 2022, 12:02
Hallo, prüf mal ob die übergebenen Konstanten noch irgendwo anders deklariert sind.
Das gleiche mit AppInfo, was steht da drinnne wenn aus XE4 aufgerufen und was bei 10.1?

Ich habe bei mir (Delphi RIO) nur das Problem das ich nicht am DevPc (VM, Remote Zugriff) testen kann. Der virtuelle Twain Scanner wirft bei mir immer eine AV aus QT, das QT nicht korrekt installiert wäre. Alle anderen QT Programme laufen aber.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
mts

Registriert seit: 14. Dez 2008
24 Beiträge
 
Delphi XE4 Professional
 
#4

AW: DelphiTwain findet keine Geräte in Delphi 10.1 - in XE4 alles ok

  Alt 7. Jan 2022, 12:04
Ist ein ganz allgemeiner Fehler (TWRC_FAILURE)
Ich habe zwischenzeitlich mal eine andere Lib ausprobiert (https://github.com/dynarithmic/twain_library), die natürlich unterm Strich das selbe macht und habe exakt das gleiche Problem.
  Mit Zitat antworten Zitat
mts

Registriert seit: 14. Dez 2008
24 Beiträge
 
Delphi XE4 Professional
 
#5

AW: DelphiTwain findet keine Geräte in Delphi 10.1 - in XE4 alles ok

  Alt 7. Jan 2022, 12:05
Hallo, prüf mal ob die übergebenen Konstanten noch irgendwo anders deklariert sind.
Das gleiche mit AppInfo, was steht da drinnne wenn aus XE4 aufgerufen und was bei 10.1?

Ich habe bei mir (Delphi RIO) nur das Problem das ich nicht am DevPc (VM, Remote Zugriff) testen kann. Der virtuelle Twain Scanner wirft bei mir immer eine AV aus QT, das QT nicht korrekt installiert wäre. Alle anderen QT Programme laufen aber.
> war das 1. was ich gemacht habe... Alles gleich.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: DelphiTwain findet keine Geräte in Delphi 10.1 - in XE4 alles ok

  Alt 7. Jan 2022, 12:55
Vielleicht kann Dir die WinAPI weiterhelfen?
Windows Image Acquisition (WIA)

Delphi-Quellcode:
var
  DevMgr: IDeviceManager;
  Scanner: Idevice;
  Picture: IItem;
  Image: OleVariant;
  AImage: IImageFile;
begin
  DevMgr := CreateOleObject('WIA.DeviceManager') as IDeviceManager;

  // Figure out which device is the scanner
  Scanner:= DevMgr.DeviceInfos.Item[1].Connect;

  //Command: Figure out which command scans..
  Picture := Scanner.ExecuteCommand(Scanner.Commands.Item[1].CommandID);

  //Transfer as JPG
  Image := Picture.Transfer(Picture.Formats.Item[1]);

  //Save the image
  AImage := IImageFile(Image);
  AImage.SaveFile('c:\wia_viaScanner\image.' + AImage.FileExtension);
end;

gefunden bei SO.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
mts

Registriert seit: 14. Dez 2008
24 Beiträge
 
Delphi XE4 Professional
 
#7

AW: DelphiTwain findet keine Geräte in Delphi 10.1 - in XE4 alles ok

  Alt 7. Jan 2022, 15:49
ich werde hier noch verrückt. Ich habe jetzt testweise auch mal delphi 10.3 installiert. > gleiches Problem

WIA und Windows 10 ist ein totaler Horror. Man kann ja gerne mal versuchen um aktuellen Windows 10 einen WIA-Treiber zu installieren...
> Habe den WIA-Scanner aber dennoch installiert, habe dann in NAPS2 (Open-Source scanner software) kontrolliert, dass sowohl der WIA als auch der TWAIN Treiber angezeigt wird und funktioniert. Dort ist alles ok.

ABER, sobald ich versuche per WIA den Scanner über Delphi zu finden, finde ich keinen Scanner. TWAIN findet nach wie vor nur über delphi XE4 den scanner.
Habe dann mal testweise eine C# Projekt aufgemacht. Dort finde ich per WIA auch keinen Scanner, TWAIN funktioniert.

Geändert von mts ( 7. Jan 2022 um 15:56 Uhr)
  Mit Zitat antworten Zitat
Steku

Registriert seit: 12. Mai 2008
181 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#8

AW: DelphiTwain findet keine Geräte in Delphi 10.1 - in XE4 alles ok

  Alt 7. Jan 2022, 16:18
Ich denke du meinst mit mit DelphiTwain das hier? http://www.kluug.net/delphitwain.php

Zum Testen vielleicht geeignet (Trialversion): http://www.intervalsoftware.com/envision.html

Grüße
Steku
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
672 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: DelphiTwain findet keine Geräte in Delphi 10.1 - in XE4 alles ok

  Alt 7. Jan 2022, 18:25
Hallo zusammen,

Habe hier ein ganz verrücktes Problem.
Ich nutze DelphiTwain schon seit geraumer Zeit.
Jetzt habe ich eine Anwendung von XE4 auf Delphi 10.1 migriert und delphiTwain findet keine Scanner mehr.

Habe daraufhin einfach die Sample-Anwendung (DelphiTwainDemo2) kompiliert. In Delphi XE4 werden sofort die Scanner angezeigt, in Delphi 10.1 keine.
- Beides 32bit Anwendungen
- LoadLibrary läd in beiden Fällen erfolgreich die gleiche dll (c:\windows\TWAIN_32.DLL)

Das Problem tritt in der Methode "TCustomDelphiTwain.EnumerateDevices()" auf.
Delphi XE4:
Code:
    CallRes := TwainProc(AppInfo, nil, DG_CONTROL, DAT_IDENTITY,
      MSG_GETFIRST, @NewSource.Structure);

>>   CallRes = 0
Delphi 10.1:
Code:
    CallRes := TwainProc(AppInfo, nil, DG_CONTROL, DAT_IDENTITY,
      MSG_GETFIRST, @NewSource.Structure);

>>   CallRes = 1
Hat irgendjemand eine Idee oder evtl. das gleiche Problem schon gehabt?
Eventuell liegt es an einer Änderung von Optionen wie dem Record-Alignment. Zeig mal die Deklaration des Typs von Newsource.Structure.
Peter Below
  Mit Zitat antworten Zitat
mts

Registriert seit: 14. Dez 2008
24 Beiträge
 
Delphi XE4 Professional
 
#10

AW: DelphiTwain findet keine Geräte in Delphi 10.1 - in XE4 alles ok

  Alt 7. Jan 2022, 18:55

Eventuell liegt es an einer Änderung von Optionen wie dem Record-Alignment. Zeig mal die Deklaration des Typs von Newsource.Structure.
Genau das glaube ich auch.
Ich habe mir die original-header mal angeschaut (https://github.com/twain/twain-speci...ns/2.4/twain.h)
Alle structs sind pack(2) aligned. Soweit ich weiß ist ein Delphi "packed record" aber pack(1).

Wundere mich bloß wie der jemals laufen konnte? Oder übersehe ich hier was?

Die Änderung in das hier hat aber auch nix gebracht:
{$A2}
TW_IDENTITY = record
...

vorher:
Code:
  TW_IDENTITY = packed record
    Id: TW_UINT32;            { Unique number. In Windows, application hWnd }
    Version: TW_VERSION ;     { Identifies the piece of code }
    ProtocolMajor: TW_UINT16; { Application and DS must set to TWON_PROTOCOLMAJOR }
    ProtocolMinor: TW_UINT16; { Application and DS must set to TWON_PROTOCOLMINOR }
    SupportedGroups: TW_UINT32; { Bit field OR combination of DG_ constants }
    Manufacturer: TW_STR32;  { Manufacturer name, e.g. "Hewlett-Packard" }
    ProductFamily: TW_STR32; { Product family name, e.g. "ScanJet" }
    ProductName: TW_STR32;   { Product name, e.g. "ScanJet Plus" }
  end;
>> Ich bin mittlerweile zu 90% sicher, dass es etwas mit dem byte-alignment zu tun hat. Finde allerdings keine Info, dass dort etwas geändert wurde.

Hier die komplette Funktion mal auf das wesentliche runtergebrochen (funktioniert in XE4, funktioniert nicht in 10.1):
Code:
var
  _Handle: HInst;
  _TwainProc: TDSMEntryProc;
  res : boolean;
  resI : integer;
  idn : TW_IDENTITY;
  newS : TW_IDENTITY;
  hndl : THandle;
begin
  _Handle := LoadLibrary('c:\Windows\twain_32.dll');;
  if (_Handle = INVALID_HANDLE_VALUE) then exit;

  _TwainProc := nil;
  @_TwainProc := GetProcAddress(_Handle, MakeIntResource(1));
  if (@_TwainProc = nil) then exit;

  idn.Id := 0;
  idn.Version.MajorNum := 0;
  idn.Version.MinorNum := 0;
  idn.Version.Language := 0;
  idn.Version.Country := 0;
  idn.Version.Info := '';
  idn.ProtocolMajor := 1;
  idn.ProtocolMinor := 9;
  idn.SupportedGroups := DG_CONTROL or DG_IMAGE;
  idn.Manufacturer := '';
  idn.ProductFamily := '';
  idn.ProductName := '';

  hndl := Handle;
  res := _TwainProc(@idn, nil, DG_CONTROL, DAT_PARENT, MSG_OPENDSM, @hndl) = TWRC_SUCCESS; //source manager loaded
  if (not res) then exit;

  newS := idn;
  newS.Id := 0;
  resI := _TwainProc(@idn, nil, DG_CONTROL, DAT_IDENTITY, MSG_GETFIRST, @newS);
  if (resI = 0) then
    ShowMessage('gut');

Geändert von mts ( 7. Jan 2022 um 19:57 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz