LabVIEWForum.de - Probleme mit HASP-API

LabVIEWForum.de

Normale Version: Probleme mit HASP-API
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
' schrieb:...dann kann(sollte) man ja nach zusätzlich selbst Aufrufe in seine Software einprogrammieren. Die DLL-Schnittstelle von Aladdin ist aber nicht allzu kompliziert.

Probier's mal aus.

MfG, Jens

Hallo,

ich hab nach einiger Zeit des passiven Mitlesens auch mal an eine eigene Anfrage:

Ich habe hier das HASP HL Demo Kit mit einem Dongle zu liegen und kriege es irgendwie nicht hin, dass ich mit LabVIEW (8.0) auf die Donglefunktionen zugreifen kann. Mit anderen Worten: Ich komme irgendwie nicht mit der HASP API klar.
Ich habe es mit einem Knoten zum Aufruf externer Bibliotheken versucht, aber irgendwie kommen dabei immer nur Abstürze raus.

Kann mir vielleicht jemand mal ein Beispiel-VI schicken, wie die Einbindung der hasp_windows_demo.dll aussehen muss?

Bin für jede Hilfe dankbar!
Hallo,

laut Profil hast du doch LV8.2. Dann hast du doch keine großen Hürden vor dir: Der DLL-Assistent kommt mit den meisten Funktionsaufrufen der hasp-DLL ohne Problem zurecht (Ausnahmen bestätigen hier die Regel, aber die Aufrufe, bei der der Assi Probleme hat, sind eher exotisch).

MfG, Jens
' schrieb:Hallo,

laut Profil hast du doch LV8.2. Dann hast du doch keine großen Hürden vor dir: Der DLL-Assistent kommt mit den meisten Funktionsaufrufen der hasp-DLL ohne Problem zurecht (Ausnahmen bestätigen hier die Regel, aber die Aufrufe, bei der der Assi Probleme hat, sind eher exotisch).

MfG, Jens


Ja, ich hab auf einem Rechner die 8.2, der ist jedoch momentan für mich nicht benutzbar. Also probiere ich hier mit 8.0 rum. Es muss doch ne Möglichkeit geben, die API sinnvoll zu nutzen?!
Wo liegen denn genau deine Probleme?

Poste doch mal ein VI, damit man genauer analysieren kann, was falsch läuft.

MfG, Jens
Tja, eigentlich stehe ich ganz am Anfang. Ich habe bisher nur mal mit dem Knoten zum Einbinden externer DLLs rumprobiert. Da die API allerdings Pointer und Handles verwendet, von denen ich im LabVIEW-Kontext im übrigen bisher nichts gehört hab, fehlt mir irgendwie der Einstieg.

Wenn ich morgen wieder im Büro bin, dann liefere ich mal ein wenig mehr Info's. Bisher schon mal vielen Dank für die Hilfsbereitschaft...

Gruss
Also, ein paar Infos zum Einstieg:

Vendor-Center ist wohl installiert?! Wenn nicht, INSTALLIEREN!

PDF-Manual bzw. PapierManual durchlesen, vor allem der Abschnitt HASP HL API Reference.
Die Aufrufe, die in diesem Abschnitt beschrieben sind, findest du unter ..ProgrammeAladdinHASP HLAPIRuntimeCwin32hasp_windows.dll, im selben Verzeichnis auch die entsprechende Header-Datei hasp_hl.h.

Hilfreich ist auch die Toolbox im VendorCenter, zumindest, solange du dir die C-API anschaust.

Vor der HASP_Handle brauchst du dich nicht gross scheuen, dass ist im Prinzip nur eine U32-Variable.

MfG, Jens
' schrieb:Vendor-Center ist wohl installiert?! Wenn nicht, INSTALLIEREN!

Ja, ist drauf... (Vendor Suite)

' schrieb:PDF-Manual bzw. PapierManual durchlesen, vor allem der Abschnitt HASP HL API Reference.

liegt vor mir...

' schrieb:Die Aufrufe, die in diesem Abschnitt beschrieben sind, findest du unter ..ProgrammeAladdinHASP HLAPIRuntimeCwin32hasp_windows.dll, im selben Verzeichnis auch die entsprechende Header-Datei hasp_hl.h.

Bei mir ist es die hasp_windows_demo.dll. Header Datei ist natürlich auch da...

Zu Beginn möchte die Funktion hasp_login ausführen. Die API reference sagt dazu folgendes:

hasp_status_t HASP_CALLCONV hasp_login(
hasp_feature_t feature_id,
hasp_vendor_code_t vendor_code,
hasp_handle_t * handle)

In LabVIEW hab ich einen Knoten zum Aufruf externer Bibliotheken eingefügt.
Darin hab ich dann die dll und die Funktion hasp_login ausgewählt. Die Aufrufkonvention ist auf stdcall (WINAPI) eingestellt.

Nun wirds knifflig:

Was muss für die Ein- und Ausgabeparameter eingestellt werden?
Ich vermute, der Rückgabetyp ist ein String im Format C-String_Zeiger...?
Was muss für feature_id eingestellt werden? Ich vermute, für das Demokit eine 0 oder eine 1?!
Der VendorCode ist der lange Schlüssel, der in der Toolbox auch im Autocode angezeigt wird....in welcher Form wird der in LabVIEW übergeben? Laut reference soll es ja ein Zeiger sein?!
Der session handle soll als Pointer übergeben werden. Wie ich das machen soll, weiß ich auch nicht. Welchen Wert weist man da überhaupt zu?


Fragen über Fragen.....

Bin für jede Hilfe dankbar!

Gruss
Schau dir mal genau die Header-Datei an!

Die feature_id ist vom Datentyp U32, welche Features auf dem Demo-Dongle installiert waren, weiss ich nicht mehr, aber 0 geht bestimmt.

Das handle ist ebenfalls vom Datentyp U32, als Pointer wird es übergeben, da es ein Wert ist, der durch den Funktionsaufruf geändert wird. Das geht in C nicht anders.

Und den vendor_code habe ich als Array of U8-Bytes übergeben.

Der Rückgabewert der Funktion ist vom Datentyp her "hasp_status_t", das wird auch irgendwo in der Header-Datei definiert, das darfst du jetzt als Übung mal selber herausfinden.

MfG, Jens
Hallo,

heute konnte ich den ersten Erfolg verzeichnen. Der Login funktioniert schon fast. Ich bekomme zumindest keinen Crash mehr und die DLL gibt einen Fehlercode 22 aus, welcher bedeutet, dass der Vendor Code falsch ist. Das ist auch richtig so, denn ich hab zum Testen nur nen String "abcd" mitgegeben.

Der Vendor Code besteht ja aus ner Menge Zeilen und jeweils viele Zeichen pro Zeile. Sehe ich das richtig, dass ich mir daraus dann ein Array aus U8-Bytes zusammenbauen muss? Kommt dann jedes Zeichen in eine Zelle des Arrays? Das ergibt dann für den ganzen Vendor Code ein Array mit nur einer Zeile und x-Spalten....?!

Das werd ich dann morgen gleich mal testen.
So langsam komme ich wohl dahinter....

Übrigens konnte ich gestern auch noch schnell die DLL-Importfunktion von LV 8.2.1 testen. Das sieht soweit sehr brauchbar aus.

Vielen Dan für die Denkanstöße und Tipps!

Gruss
' schrieb:Der Vendor Code besteht ja aus ner Menge Zeilen und jeweils viele Zeichen pro Zeile. Sehe ich das richtig, dass ich mir daraus dann ein Array aus U8-Bytes zusammenbauen muss? Kommt dann jedes Zeichen in eine Zelle des Arrays? Das ergibt dann für den ganzen Vendor Code ein Array mit nur einer Zeile und x-Spalten....?!
Genau, String (aber ohne Zeilenumbrüche, also Carriage Returns oder LineFeeds) an die Funktion "String To Byte Array" anschließen, und schon sollte es funzen. Zum Kopieren des Vendor-Codes, öffne einfach mal die Datei "ProgrammeAladdinHASP HLVendorCodesdemoma.hvc" im ASCII-Editor.

MfG, Jens

EDIT: Ach ja, die Feature-ID ist etwas komplizierter, nicht nur einfach 0 oder 1, schau dir mal das Format in der ToolBox des VendorCenter an.
Seiten: 1 2 3
Referenz-URLs