String aus anderer Anwendung bekommen
String aus anderer Anwendung bekommen
Hallo!
Ich habe die Aufgabe bekommen, für meinen Lehrer ein Programm zur Identifikation der Lehrerschaft zu schreiben.
Dazu gab er mir eine Antenne und die dazugehörigen Karten.
Mit dem Ding kenne ich mich gar nicht aus, konnte aber herausfinden, wie der "Demo Reader" funktioniert.
Mit diesem Reader kann ich dann die Nummern der Karten auslesen lassen, welche ich für meine Anwendung im Lazarus brauche.
Kann mir jemand sagen, ob ich mit Lazarus auf diese Strings zugreifen kann, um sie dann verarbeiten zu lassen?
Soweit, wie ich das verstanden habe, kann man sich solch einen Reader auch selber mit den vorhandenen DLLs programmieren, aber ich kann leider kein C++, weshalb das auch wegfällt.
Danke schonmal, für mögliche Infos!
Ich habe die Aufgabe bekommen, für meinen Lehrer ein Programm zur Identifikation der Lehrerschaft zu schreiben.
Dazu gab er mir eine Antenne und die dazugehörigen Karten.
Mit dem Ding kenne ich mich gar nicht aus, konnte aber herausfinden, wie der "Demo Reader" funktioniert.
Mit diesem Reader kann ich dann die Nummern der Karten auslesen lassen, welche ich für meine Anwendung im Lazarus brauche.
Kann mir jemand sagen, ob ich mit Lazarus auf diese Strings zugreifen kann, um sie dann verarbeiten zu lassen?
Soweit, wie ich das verstanden habe, kann man sich solch einen Reader auch selber mit den vorhandenen DLLs programmieren, aber ich kann leider kein C++, weshalb das auch wegfällt.
Danke schonmal, für mögliche Infos!
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: String aus anderer Anwendung bekommen
Hallo.
Vorab: Mehr informationen...
hier ein paar Beispiele:
Was sein könnte wär das ihr in der Schule so Sicherheits-Check-Karten habt ? Rate ich da richtig ?
Weil bei "nummern der Karten" hab ich zuerst an Landkarten gedacht
Wenn es keine Direkte unit dafür gibt dann wirst du um die Dll variante nicht drumm rumkommen,
dabei soll aber auch erwähnt sein das du dafür kein C++ können musst. Du musst nur wissen wie du die Daten übergeben musst.
Ein Pascal-Header wär optimanl, dann könntest du die Dll ansprechen wie eine ganz normale Funktion. SOllte ein Header für die DLL nicht in Pascal gegeben sein, so müsstest du ihn aus C++ übertragen. (Also wenn in der C++ Datei stehen würde:)
müsste das in
übersetzt werden. Die eigentliche Funktion ist da unwichtig , nur den Prozedurkopf brauchst du...
Vorab: Mehr informationen...
hier ein paar Beispiele:
Indentifizieren kann man Personen auf viele Arten ? Foto, Sound, ???Ich habe die Aufgabe bekommen, für meinen Lehrer ein Programm zur Identifikation der Lehrerschaft zu schreiben.
Gut ein Link, aber was macht diese Antenne jetzt wirklich... Bluetooth ?Dazu gab er mir eine Antenne und die dazugehörigen Karten.
Was sein könnte wär das ihr in der Schule so Sicherheits-Check-Karten habt ? Rate ich da richtig ?
Weil bei "nummern der Karten" hab ich zuerst an Landkarten gedacht

Wenn es keine Direkte unit dafür gibt dann wirst du um die Dll variante nicht drumm rumkommen,
dabei soll aber auch erwähnt sein das du dafür kein C++ können musst. Du musst nur wissen wie du die Daten übergeben musst.
Ein Pascal-Header wär optimanl, dann könntest du die Dll ansprechen wie eine ganz normale Funktion. SOllte ein Header für die DLL nicht in Pascal gegeben sein, so müsstest du ihn aus C++ übertragen. (Also wenn in der C++ Datei stehen würde:)
Code: Alles auswählen
void Tada(int a); // als Deklaration
Code: Alles auswählen
procedure Tada(a:integer);
Code: Alles auswählen
Signatur := nil;
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: String aus anderer Anwendung bekommen
Das stimmt so nicht.TomTom hat geschrieben:Soweit, wie ich das verstanden habe, kann man sich solch einen Reader auch selber mit den vorhandenen DLLs programmieren, aber ich kann leider kein C++, weshalb das auch wegfällt.
Natürlich kannst Du mit Deinem Pascal-Programm DLLs aufrufen ! Ich vermute, das ist auch die einzige Möglichkeit das Problem anzugehen, da der Hersteller wahrscheinlich keine Hardware - bzw. USB-Treiber-Schnittstellen - Beschreibung für das Gerät herausgibt.
Beim DLL-Aufruf ist ein mögliches Problem, dass Du mit dem Pascal-Programm keine "echten" C++ - Unterprogramme in der DLL (oder sonstwo) aufrufen kannst (weil die "ABI"s von FPC und C++ nicht kompatibel sind).
Damit man sie mit verschiedenen Sprachen verwenden kann werden im Allgemeinen DLLs aber so gebaut, dass sie keine C++ - Funktionen sondern "flache" (ANSI-C-) Funktionen (normalerweise mit "STDCALL" Aufruf-Konvention) zur Verfügung stellen. Die kannst Du problemlos mit Pascal aufrufen (dafür gibt es das STDCALL Keyword in der Sprache). Die Aufruf-Konventionen müsste die Doku der DLL eindeutig beschreiben.
Viel Erfolg !
-Michael
Re: String aus anderer Anwendung bekommen
Das stimmt wohl. Ich wollte das alles jetzt so kurz und verständlich wie möglich halten.MAC hat geschrieben:Indentifizieren kann man Personen auf viele Arten ?
Auf jeden Fall soll das so laufen, dass mit Hilfe von Magnetkarten die Benutzerkennung mithilfe dieses Readers gelesen wird und diese dann verarbeitet wird.
Sicherheits-Check wäre eine Möglichkeit. Was festes ist nicht geplant. Es geht erstmal darum, die Möglichkeit zu haben, mit Hilfe der Karten am Computer sagen zu können, welche Person vor einem steht.
@mschnell
Du hast - natürlich - recht. Ich hab das Prinzip dahinter wohl endlich verstanden. Dennoch hapert es an der Einbindung.
Ich hab mir die Finger schon wund gegooglt, aber ich weiß immer noch nicht so recht, wie das Funktionieren soll.
Wüsstest du eine Seite, auf der ich mehr über das Einbinden und Verwendung von DLLs erfahren kann? Am besten etwas einfaches. Das, was ich gefunden hab war alles sehr, sehr kompliziert erklärt.
-
- Beiträge: 27
- Registriert: Do 28. Jan 2010, 13:24
- OS, Lazarus, FPC: openSuse Leap 42.3 (L 1.8 FPC 3.0.4)
- CPU-Target: 64Bit
Re: String aus anderer Anwendung bekommen
Also prinzipell ist die Headerdatei Readerdll.h (soweit ich auf die schnelle gesehen habe) relativ einfach.
Am besten erstelltst du eine Unit "readerdll_import" o.ä.
struct = record
der erste Block sind dann Funktionen / Proceduren je nachdem ob void oder ein Rückgabewert dasteht
die Konversation wäre z.B.
(nicht getestet...)
Der letzte Block (ab // DESFire and SAM definitions) sind Konstanten...
Die können automatisch mit h2pas umgewandelt werden (h2pas wandelt vielleicht auch die Funktionen/Proceduren richtig um, aus Erfahrung würde ich aber sagen, das das nicht gehen wird...)
http://www.freepascal.org/tools/h2pas.var" onclick="window.open(this.href);return false;
Wie die Unit dann auszusehen hat, kannst du z.B. hier herauslesen:
http://svn.freepascal.org/svn/fpc/trunk ... rc/lua.pas" onclick="window.open(this.href);return false; (Lua-Headerimport)
oder am Beispiel OpenAL-Import
http://svn.freepascal.org/svn/fpc/trunk ... penal/src/" onclick="window.open(this.href);return false;
(fast noch einfacher, Unit ist aber in mehrere .inc aufgeteilt)
Ein wenig C sollte man schon können, um C-Typen die entsprechenden Pascal-Typen zuordnen zu können. (Wenn nicht - da gibts irgendwo Tabellen
)
Ich hoffe das hat weitergeholfen, mehr Infos gibts auch auf der FPC-Wiki...
... oder halt nochmal fragen
Am besten erstelltst du eine Unit "readerdll_import" o.ä.
struct = record
der erste Block sind dann Funktionen / Proceduren je nachdem ob void oder ein Rückgabewert dasteht
die Konversation wäre z.B.
Code: Alles auswählen
function RDR_DetectSerialPort(buffer: PChar; buflength : Integer) : Char; stdcall; external ReaderDLL;
Der letzte Block (ab // DESFire and SAM definitions) sind Konstanten...
Die können automatisch mit h2pas umgewandelt werden (h2pas wandelt vielleicht auch die Funktionen/Proceduren richtig um, aus Erfahrung würde ich aber sagen, das das nicht gehen wird...)
http://www.freepascal.org/tools/h2pas.var" onclick="window.open(this.href);return false;
Wie die Unit dann auszusehen hat, kannst du z.B. hier herauslesen:
http://svn.freepascal.org/svn/fpc/trunk ... rc/lua.pas" onclick="window.open(this.href);return false; (Lua-Headerimport)
oder am Beispiel OpenAL-Import
http://svn.freepascal.org/svn/fpc/trunk ... penal/src/" onclick="window.open(this.href);return false;
(fast noch einfacher, Unit ist aber in mehrere .inc aufgeteilt)
Ein wenig C sollte man schon können, um C-Typen die entsprechenden Pascal-Typen zuordnen zu können. (Wenn nicht - da gibts irgendwo Tabellen

Ich hoffe das hat weitergeholfen, mehr Infos gibts auch auf der FPC-Wiki...
... oder halt nochmal fragen
Zuletzt geändert von downloaditweb am Di 27. Dez 2011, 08:57, insgesamt 1-mal geändert.
-
- Beiträge: 340
- Registriert: Di 12. Sep 2006, 08:57
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Kontaktdaten:
Re: String aus anderer Anwendung bekommen
Hallo TomTom,
das kommt mir doch bekannt vor.
Ist das ein wirklich ein MAGNETkarten-Leser - haben die Karten also einen sichtbaren Magnetstreifen?
Wenn ja, dann müsste das Lesegerät evtl. sogar eine Tastatureingabe simulieren (zumindest tun dies die ec-Karten-Reader, die ich kenne "HID-konform").
Oder ist dies eher RFID (kontaktlose Karten, die man nur auflegen muss)?
Wenn es wirklich nur über den seriellen Port geht (COM1, COM2, COM3) dann kann ich dir als Tipp nur "Synapse" geben - mit diesem Package habe ich schon einiges hinbekommen.
Geneuer gesagt benötigst du die Unit "SynaSer.pas".
Gruß
das kommt mir doch bekannt vor.
Ist das ein wirklich ein MAGNETkarten-Leser - haben die Karten also einen sichtbaren Magnetstreifen?
Wenn ja, dann müsste das Lesegerät evtl. sogar eine Tastatureingabe simulieren (zumindest tun dies die ec-Karten-Reader, die ich kenne "HID-konform").
Oder ist dies eher RFID (kontaktlose Karten, die man nur auflegen muss)?
Wenn es wirklich nur über den seriellen Port geht (COM1, COM2, COM3) dann kann ich dir als Tipp nur "Synapse" geben - mit diesem Package habe ich schon einiges hinbekommen.
Geneuer gesagt benötigst du die Unit "SynaSer.pas".
Gruß
Grüße, Antrepolit
care only if your os is really burning
care only if your os is really burning
-
- Beiträge: 92
- Registriert: So 26. Aug 2007, 20:35
- OS, Lazarus, FPC: Win7, Laz 1.2.6, FPC 2.6.4, SVN 33306, ZEOS 7.1.4
- CPU-Target: 32Bit
- Wohnort: Helmstedt
- Kontaktdaten:
Re: String aus anderer Anwendung bekommen
Das ist vermutlich ein RFID- Leser, sieht nach Mifare aus.
Der sollte seine Daten der gelesenen Karte in jedes Editfeld schreiben, passenden Treiber vorausgesetzt.
ist das nicht der Fall, dann gibt es sicherlich eine SDK dazu (AtiveX?). Im Compiler einbinden und bei den Events den Code der Karte abfangen.
Nur mit dem Programm allein kann man wenig anfangen.
Gruß
Peter
P.S. dll hast du mindesten eine Funktionsbibliothek die du mit external einbinden kannst.
Der sollte seine Daten der gelesenen Karte in jedes Editfeld schreiben, passenden Treiber vorausgesetzt.
ist das nicht der Fall, dann gibt es sicherlich eine SDK dazu (AtiveX?). Im Compiler einbinden und bei den Events den Code der Karte abfangen.
Nur mit dem Programm allein kann man wenig anfangen.
Gruß
Peter
P.S. dll hast du mindesten eine Funktionsbibliothek die du mit external einbinden kannst.
Zeiterfassung, einfach gerechter!
Re: String aus anderer Anwendung bekommen
Was ist mit der Zwischenablage? Das sollte doch einfach zu realisieren sein!
Baba.
Baba.