ctypes: Funktionsaufruf gibt Fehler zurück

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Steffo
User
Beiträge: 45
Registriert: Sonntag 24. Mai 2009, 19:38

Hallo,
ich versuche gerade über ctypes eine dll zu laden und anschließend eine Funktion aufzurufen.
Das Laden der Lib funktioniert, nur das Aufrufen der gewünschten Funktion endet mit einem Fehler.
Hier der Code:

Code: Alles auswählen

from ctypes import *

lib = cdll.LoadLibrary("AtUsbHid.dll")
print "Folgende Lib wurde geladen:", lib
print lib.findHidDevice(0x03EB, 0x2402)
Der Code gibt folgendes aus:
Folgende Lib wurde geladen: <CDLL 'AtUsbHid.dll', handle 10000000 at aa02f0>
Traceback (most recent call last):
File "C:\Documents and Settings\stdi3650\My Documents\Aptana Studio 3 Workspace\USB-Test\src\atmel_test.py", line 11, in <module>
print lib.findHidDevice(0x03EB, 0x2402)
ValueError: Procedure called with not enough arguments (8 bytes missing) or wrong calling convention
Es heißt, dass ich womöglich nicht genügend Argumente übergeben habe, aber sowohl die API als auch das C++ Beispiel sagen, dass das so aufgerufen werden soll.

Hier das C++ Beispiel:

Code: Alles auswählen

#define VID 0x03EB
#define PID_2 0x2402
// ...
if (DYNCALL(findHidDevice)(VID, PID_2)) {
	printf(">>> USB HID device  VID=0x%04X, PID=0x%04X opened.\n", VID, PID_1);
}
Was mache ich also falsch?!

Danke im Voraus!

L. G.
Steffo
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Wie sieht den die Deklaration von findHidDevice aus? Das C++-Beispiel ist ja recht nichtssagend, da man nicht die Typen der Parameter sieht und nicht weiß, wie viele Parameter die Funktion überhaupt hat.
Das Leben ist wie ein Tennisball.
Steffo
User
Beiträge: 45
Registriert: Sonntag 24. Mai 2009, 19:38

Stichwort Calling Convention. Windows brüht mal wieder seine eigene Suppe.
So geht's:

Code: Alles auswählen

lib = WinDLL("AtUsbHid.dll")
Antworten