String aus anderer Anwendung bekommen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
TomTom
Beiträge: 4
Registriert: Mi 14. Sep 2011, 19:43

String aus anderer Anwendung bekommen

Beitrag von TomTom »

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.
Besagter "Demo Reader"
Besagter "Demo Reader"
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!

MAC
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

Beitrag von MAC »

Hallo.

Vorab: Mehr informationen...
hier ein paar Beispiele:
Ich habe die Aufgabe bekommen, für meinen Lehrer ein Programm zur Identifikation der Lehrerschaft zu schreiben.
Indentifizieren kann man Personen auf viele Arten ? Foto, Sound, ???
Dazu gab er mir eine Antenne und die dazugehörigen Karten.
Gut ein Link, aber was macht diese Antenne jetzt wirklich... Bluetooth ?

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 :D

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
müsste das in

Code: Alles auswählen

procedure Tada(a:integer);
übersetzt werden. Die eigentliche Funktion ist da unwichtig , nur den Prozedurkopf brauchst du...

Code: Alles auswählen

Signatur := nil;

mschnell
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

Beitrag von mschnell »

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.
Das stimmt so nicht.

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

TomTom
Beiträge: 4
Registriert: Mi 14. Sep 2011, 19:43

Re: String aus anderer Anwendung bekommen

Beitrag von TomTom »

MAC hat geschrieben:Indentifizieren kann man Personen auf viele Arten ?
Das stimmt wohl. Ich wollte das alles jetzt so kurz und verständlich wie möglich halten.
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.

downloaditweb
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

Beitrag von downloaditweb »

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.

Code: Alles auswählen

function RDR_DetectSerialPort(buffer: PChar; buflength : Integer) : Char; stdcall; external ReaderDLL;
(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 :wink: )

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.

Antrepolit
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

Beitrag von Antrepolit »

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ß
Grüße, Antrepolit

care only if your os is really burning

petermännchen
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

Beitrag von petermännchen »

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.
Zeiterfassung, einfach gerechter!

baba
Beiträge: 265
Registriert: Mi 4. Apr 2007, 17:47

Re: String aus anderer Anwendung bekommen

Beitrag von baba »

Was ist mit der Zwischenablage? Das sollte doch einfach zu realisieren sein!

Baba.

Antworten