Forum: Mikrocontroller und Digitale Elektronik Python Ctypes "Access Violation Reading"


von Tom (Gast)


Lesenswert?

Hallo Zusammen,

ich habe ein großes Problem: folgender Code Soll eine DLL in Python
einbinden und dann deren Funktionen verwenden.
1
from ctypes import *
2
3
print "Lade EasyLase-Library..."
4
mylib = CDLL("Easylase.dll")
5
print "Pruefe auf verfuegbare Geraete..."
6
nummer=mylib.EasyLaseGetCardNum()
7
print nummer
8
print "Pruefe Status..."
9
print mylib.EasyLaseGetStatus(nummer-1)
10
print "Sende DMX-Werte...."
11
#mylib.EasyLaseWriteDMX()
12
#mylib.EasyLaseDMXOut(0, arr, 0, 12)

Leider klappt das nicht so wie es soll. Zwar wird in nummer die richtige
Box-Anzahl eingetragen (1) doch schon der nächste Aufruf spukt einen
Fehler aus:
1
Lade EasyLase-Library...
2
Pruefe auf verfuegbare Geraete...
3
1
4
Pruefe Status...
5
Traceback (most recent call last):
6
  File "windll.py", line 9, in <module>
7
    print mylib.EasyLaseGetStatus(nummer-1)
8
WindowsError: exception: access violation reading 0x00000000

aus der DLL-Doku:
1
Function EasyLaseGetStatus(CardNumber:integer) :integer
2
Ermitteln des Kartenstatus hinsichtlich Framepuffer und USB-Funktionalität.
3
Rückgabewert: 0 = USB-Error (genauer Errorcode in EasyLaseGetLastError)
4
1 = Ready (Frames können geladen werden)
5
2 = Busy (Beide Framepuffer voll, Empfangsdaten werden verworfen)

Kann mir jemand weiterhelfen?

Schonmal Danke :-)

von gregor (Gast)


Lesenswert?

warum ziehst du von der Gerätenummer 1 ab?

Änder den Aufruf
1
print mylib.EasyLaseGetStatus(nummer-1)

mal in
1
print mylib.EasyLaseGetStatus(nummer)

von Oliver (Gast)


Lesenswert?

gregor schrieb:
> warum ziehst du von der Gerätenummer 1 ab?

Weil er die Doku gelesen hat ;-)

Ansonsten bleibt die Frage, ob das im Forum: Mikrocontroller und 
Elektronik richtig untergebracht ist.

Oliver

von Tom (Gast)


Lesenswert?

Ich habe den Eindruck, dass das Mikrocontroller & Elektronik Forum das 
am stärksten frequentierte ist und sich hier Leute mit vielfältigem 
Wissen rumtreiben :-).

von Tom (Gast)


Lesenswert?

Habe den Fehler gefunden:

Die Hersteller-DLL ist müll. Mit einer Betaversion (jmlaser.dll) klappts
problemlos.

:-):-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.