Ich versuche aktuell eine .dll einer Digitalkamera mit Python anzusprechen und verwende dazu natürlich ctypes.
Obwohl ich ein totaler Neuling bin was Python angeht, komme ich sehr gut zurecht - bis auf an einer Stelle; und zwar verlangt die .dll Funktion als Parameter einen Pointer auf einen Pointer auf einen Buffer…
Die Funktion erlaubt das aufnehmen und transferieren der Daten einzelner Bilder in den Speicher über diesen Buffer.
Syntax:
Code: Alles auswählen
HVSTATUS __stdcall HVSnapShot(HHV hhv, BYTE **ppBuffer, int nSum)
HHV hhv; --> Handle to Camera (funktioniert)
BYTE **ppBuffer; --> pointer to pointer to buffer (funktioniert anscheinend nicht)
Int nSum; --> Number of buffers [number of images that have been snapped in memory] (funktioniert)
Beispiel aus der .dll Dokumentation:
Code: Alles auswählen
// Snap two images into buffers, buffer size is decided by image resolution
// here assuming a image is 800 * 600
BYTE Buffer1 [800*600]; //Buffer for one image
BYTE Buffer2 [800*600]; //Buffer for another image
Byte *ppBuffer[2]; //This Array keeps the pointer to each buffer
ppBuffer[0] = Buffer1;
ppBuffer[1] = Buffer2;
HVSnapShot(hhv, ppBuffer, 2);
Code: Alles auswählen
## bestimme benötigte Größe pro Bild
buffer_size = 800 * 600 * ctypes.sizeof(ctypes.c_byte)
## belege etwas Platz…
ImageBuffer = ctypes.create_string_buffer(buffer_size)
## rufe die Funktion auf
ctypes.windll.LoadLibrary("HVDAILT").HVSnapShot(hhv, ctypes.byref(ImageBuffer),1)
Ich vermute, dass das Problem ist, dass ich eigentlich einen Array mit Pointern zu den einzelnen ImageBuffers brauche, den ich via ctypes dann übergeben kann?
Daher drei Fragen:
- Vermute ich richtig?
- Wie mache ich es richtig?
- Gibt es eine Möglichkeit nicht jeden Buffer einzeln an den Array zu übergeben (sagen wir mal, ich wollte einen Film aufnehmen…)
Ich freue mich auf eure Antworten!