![]() |
Delphi Twain
Guten Tag Delphianer,
ich habe die Delphi-Twain Komponente herunter geladen. Wie wird die Delphi Twain Komponente installiert? Kann mir da jemand auf die Sprünge helfen?? Gibt es vielleicht eine andere Scanner-Komponente, darf ruhig etwas kosten? Ich selber habe nichts gefunden. Vielleicht habe ich auch nur falsch gesucht. Mit Gruß HPB |
AW: Delphi Twain
Die Delphi-Twain Komponente?
Ich kann dir sagen, dass ich eine Unit habe, mit der ich die Scanner unter Windows auslisten, einen Scanner ansprechen und mir ein Dokument scannen lassen kann. Leider ist die Unit recht alt, und ich weiß leider auch nicht mehr, wo ich sie her habe. Da im Header nix steht, weiß ich auch nicht, ob ich sie so weiter geben darf (ist schließlich nicht von mir). Die Unit ist recht alt, hatte ich damals unter D7 genutzt, und seit her nicht mehr gebaucht. Hier ![]() und hier ![]() könntest du mal reinschauen. |
AW: Delphi Twain
Hi,
ich spiel mit der hier gerade rum: (Kostenlos): ![]() funktioniert so weit ich feststellen kann - leider scheint mein MFGerät einen Fehler in der Twainschnittstelle zu haben. Kostenpflichtig wäre das hier noch: ![]() wobei die angeblich bei unseren Kunden hin und wieder Probleme macht (zumindest sagt das der Flurfunk), allerdings ist die Benutzung etwas einfacher (Abruf von mehrseitigen PDF, das musst Du bei der kostenlosen halt selbst implementieren) Grüße |
AW: Delphi Twain
Moin...
Zitat:
Edit: Zitat:
|
AW: Delphi Twain
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
habe DelphiTwain von Kluug.net "installiert" (XE7) und kann damit scannen – allerdings nur in einer 32-Bit-Anwendung. Kompiliere ich die Anwendung für 64-Bit, erhalte ich die Meldung Twain is not installed. Als nächstes hab ich mir den ![]() Danach hab ich mir nochmal die Seite kluug.net angeschaut. Dort steht: you need 64bit scanner and TWAIN drivers: and tweak the line 778 in DelphiTwain.pas: fHandle := Windows.LoadLibrary(PChar(TwainDirectory + TWAINLIBRARY)); to the new DLL Das habe ich nicht verstanden. "Tweak" heißt doch soviel wie "zwicken", zumindest nach meinem Wörterbuch hier. In Zeile 778 der DelphiTwain.pas ist aber so ein Befehl gar nicht zu finden, dort steht ein end; und das gehört zu dieser Procedure:
Delphi-Quellcode:
Jetzt hab ich mir gedacht: Kopierst du die DLLs einfach in das entsprechende Programmverzeichnis. Die 64-Bit-Binary wird hier im Ordner ..\Debug\64bit\BIN erstellt, und da hab nun die beiden Dateien TWAINDSM.dll und TWAINDSM64.msm reinkopiert. Nun erscheint zwar keine Fehlermeldung beim Programmstart, dennoch stehen in meinem Scanner-Formular keine Scanner zur Auswahl bereit, wenn ich mit 64-Bit kompiliert habe, in der 32-Bit-Anwendung dagegen schon, wie die Grafik unten zeigt.
procedure TTwainIdentity.SetMajorVersion(const aMajorVersion: TW_UINT16);
begin Structure.Version.MajorNum := aMajorVersion; end; Hat schon einmal jemand diese Version von DelphiTwain mit XE7 in einer 64-Bit-Anwendung zum Laufen gebracht? Oder weiß irgend jemand, was ich noch versuchen könnte oder was ich falsch gemacht habe? Danke. |
AW: Delphi Twain
Tweak kann auch sowas wie "umbiegen" oder "leicht verändern" heißen und ich denke es geht um die Zeile mit dem Code:
fHandle := Windows.LoadLibrary(PChar(TwainDirectory + TWAINLIBRARY)); die aber wahrscheinlich überall, nun nicht (mehr) in Zeile 778 steht, wie das halt mit so Dokus ist. Vielleicht einfach mal danach im Quellcode suchen. Ich bin jetzt nicht so der Twain/dll Experte aber wahrsch. heißt die (64er) dll anders und steht in einem anderen Verzeichnis als die 32er. Dementsprechend müsstest du mal schauen, was in TwainDirectory und/bzw. in TWAINLIBRARY steht und das ggf. anpassen. |
AW: Delphi Twain
So schwer ist das nicht...
Die 64Bit-Version ist ROT: const {Name of the Twain library for 32 bits enviroment} {$IFDEF WIN64} TWAINLIBRARY: String = 'TWAINDSM.DLL'; {$ELSE} TWAINLIBRARY: String = 'TWAIN_32.DLL'; {$ENDIF} Es gibt im WINDOWS-Verzeichnis ein Unterverzeichnis twain_32: Das könnte mit TwainDirectory gemeint sein. Vielleicht wird üblicherweise da nach einem Treiber gesucht. Ich habe nocht etwas Anderes gefunden: ![]() Zitat: TWAIN Data Source Manager [DSM], compliant with version 2.2 of the TWAIN specification. [Windows] The TWAIN DSM is a shared library named TWAINDSM.DLL. There is a 32bit and a 64bit version of this file. TWAINDSM.DLL is installed in the Windows System directory (normally C:\Windows\System32). If installing the 32bit file on a 64bit system, make sure it ends up in the WOW64 System directory (normally C:\Windows\SysWow64) The DSM looks for data sources in C:\Windows\twain_32 or C:\Windows\twain_64. Data sources are also shared objects, but they have a .ds extension. ex: datasource.ds The DSM walks the twain_[32|64] directory and LoadLibrary each .ds file it finds, then uses GetProcAddress to locate the DS_Entry function. The DSM looks for the environment variable, TWAINDSM_LOG, for the location of the log file to write to. If the environment variable is not set, then no log is kept. Here is an example of setting the environment variable from a command prompt: ...
Delphi-Quellcode:
function TCustomDelphiTwain.LoadLibrary(): Boolean;
var TwainDirectory: String; begin {The library must not be already loaded} if (not LibraryLoaded) then begin Result := FALSE; {Initially returns FALSE} {Searches for Twain directory} TwainDirectory := GetTwainDirectory(); {Continue only if twain is installed in an known directory} if TwainDirectory <> '' then begin fHandle := Windows.LoadLibrary(PChar(TwainDirectory + TWAINLIBRARY)); {If the library was sucessfully loaded} if (fHandle <> INVALID_HANDLE_VALUE) then begin ... |
AW: Delphi Twain
Im aktuellen Code ist der Name der DLL bereits über eine Compiler-Direktrive angepasst, so dass man eigentlich gar nichts mehr händisch ändern muss.
|
AW: Delphi Twain
@hathor & @DeddyH
Danke für die schnellen Antworten :thumb:
Delphi-Quellcode:
Diese beiden Variablen zeigen die korrekten Inhalte: Dir steht auf 'C:\Windows\' und String(TWAINLIBRARY) auf 'TWAINDSM.DLL', die auch tatsächlich dort zu finden ist.
Dir + String(TWAINLIBRARY)
Auch ein neuerer Treiber (lide100win641403ea24.exe) scheint kein 64-Bit-Treiber zu sein, das vermute ich jedenfalls, weil im Windows-Ordner ein Verzeichnis namens Twain_32 existiert. Heißt das jetzt, wenn für den einzusetzenden Scanner kein 64-Bit-Windows-Driver vorhanden ist, kann man den mit einer 64-Bit-Anwendung auch nicht verwenden? |
AW: Delphi Twain
32 Bit-Programme können nur 32 Bit-DLLs laden, 64 Bit-Programme nur 64 Bit-DLLs. Da Treiber im Allgemeinen aus DLLs bestehen, brauchst Du also zwingend eine 64 Bit-Variante, sonst geht es nicht.
|
AW: Delphi Twain
Aber die TWAINDSM.DLL ist doch eine 64-Bit-DLL, zumindest wenn ich den Dateinamen im
![]() Diese DLL ist ja nicht der Windows-Treiber für den Scanner (von dem ich vermute, daß er 32-bittig ist), sondern die DLL, welche die Twain-Schnittstelle beinhaltet, und die hat ja mit dem Scanner erstmal nichts zu tun bzw. wird von allen Scannern verwendet. |
AW: Delphi Twain
Ja, aber die TWAIN-Schnittstelle wird ja vermutlich auch irgendwie auf den installierten Treiber zugreifen, und das geht halt nur bei gleicher Bittigkeit.
Diese Angaben sind ohne Gewehr oder Pistole :mrgreen: |
AW: Delphi Twain
Irgendwie versteh ich das nicht so ganz: Ich kann z.B. den Drucker oder sonstige Geräte, die auch über einen Windows-Treiber funktionieren, problemlos mit einer 32- und mit einer 64-Bit-Anwendung ansprechen. Nach deinen "Angaben ohne Gewehr" dürfte das ja eigentlich nicht gehen, es sei denn, diese Geräte verfügen über einen 32- und über einen 64-Bit-Treiber. Oder mach ich da jetzt einen Denkfehler?
|
AW: Delphi Twain
![]() |
AW: Delphi Twain
Danke. Dort steht: "I read that under Vista64 all drivers have to be certified 64 bit drivers."
Wenn das in Win7-64 genauso ist, dann müßten alle Treiber, die man in einem Windows-64-System verwendet, auch 64-bittig sein, oder? Und wenn das zutrifft, liegt das Problem nicht am Scanner-Treiber. Hab vorhin mal eine Mail an Ondrej Pokorny (den Weiterentwickler von DelphiTwain) geschickt und eben gerade eine Antwort erhalten: Ondrej meint dort: Ich habe leider auch keinen Scanner mit einer 64bit Anwendung über Twain zum Laufen gebracht. Nicht einmal mit dem ofiziellen Twacker: ![]() Das dürfte dann das Aus für Twain in einer 64-Bit-Anwendung sein :cry: DeddyH, kennst du vielleicht noch eine andere kostenlose Twain- oder WIA-Komponente für die neueren Delphi-Versionen? |
AW: Delphi Twain
Leider nein, ich hab seit Jahren nichts mehr selbst mit TWAIN gemacht, aber ich würde mal bei
![]() |
AW: Delphi Twain
Torry war leider Fehlanzeige. Macht aber nix, ich werde jetzt die Idee von Ondrej Pokorny umsetzen und das Scannen in eine externe 32-Bit-Anwendung auslagern, die mit der Hauptanwendung zusammenarbeitet und das benötigte Scanergebnis liefert.
|
AW: Delphi Twain
|
AW: Delphi Twain
Zitat:
Dies wäre der "lide100win641403ea24.exe". Wenn ich dem Link folge, dann kommt dort zuerst aber nur der 32-Bit-TWAIN-kompatible Treiber. Also "lide100win1403ea24.exe". |
AW: Delphi Twain
Wenn du dem Link folgst und etwas oberhalb des ersen Download-Links (der ist für den MP-Navigator) die Combobox betrachtest, dann ist dort vermutlich dein Betriebssystem ausgewählt, weil die Seite das irgendwie ermittelt hat. Gehe ich recht in der Vermutung, daß du diese Seite mit einem 32-Bit-Windows betrachtest? Ich dagegen betrachte sie mit einem 64-Bit-Windows, und daher ist dort in der Combobox auch mein 64-Bit-Windows ausgewählt. Die Seite stellt mir die meiner Windows-Version entsprechenden Link-Versionen automatisch zur Verfügung. Ich habe also genau den Treiber, der zu meiner Windows-Version paßt. Der Dateiname der heruntergeladenen Exe entspricht dem, den du oben angegeben hast. Da bin ich sicher. Ganz sicher. Hab dennoch Dank für deine Nachfrage :thumb:
Vielleicht testet ja noch jemand anderes außer mir und Ondrej Pokorny (den Weiterentwickler von DelphiTwain), verschiedene Scanner mit einer 64-Bit-Anwendung via DelphiTwain anzusprechen. Ich habe jedenfalls den Eindruck gewonnen, daß das grundsätzlich nicht geht, weil der Treiber zwar für ein 64-Bit-OS geschrieben wurde, selbst aber intern mit 32 Bit arbeitet, was auch immer. Ich kann mich damit nicht allzu lange aufhalten, die gestellte Aufgabe muß zeitnah erledigt werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz