![]() |
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.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:06 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