Ich greife auf eine C++ DLL mit Python Ctypes auf Windows 7. Ich habe die Dokumentation für die DLL, aber ich kann es nicht wirklich öffnen. Ich versuche, eine C++ - Funktion zu verwenden, die eine Funktion aufnimmt, die wiederum einen unsigned int und einen void-Zeiger aufnimmt. Hier ist ein kurzes Codebeispiel, das fehlschlägt:Ctypes - Übergabe eines Void Pointers von Python
import ctypes
import os
root = os.path.dirname(__file__)
lib = ctypes.WinDLL(os.path.join(root, 'x86', 'toupcam.dll')) #works
cam = lib.Toupcam_Open(None) #works
def f(event, ctx): #Python version of function to pass in
pass
#converting Python function to C function:
#CFUNTYPE params: return type, parameter types
func = ctypes.CFUNCTYPE(None, ctypes.c_uint, ctypes.c_void_p)(f)
res = lib.Toupcam_StartPullModeWithCallback(cam, func) #fails
Immer wenn ich diesen Code ausführen ich diesen Fehler in der letzten Zeile:
OSError: exception: access violation writing 0x002CF330.
ich nicht wirklich wissen, wie dieses Problem zu nähern, da Es ist ein C++ - Fehler, kein Python-Fehler. Ich denke, es hat mit meinem void pointer zu tun, da ähnliche Fehler, die ich online für C++ gefunden habe, pointerbezogen waren. Stimmt etwas nicht mit dem Ctypes void pointer, oder mache ich etwas falsch?
Eine schnelle Google zeigt, dass 'Toupcam_StartPullModeWithCallback' drei Argumente hat: Kamera, Callback, Kontext. http://www.webastro.net/forum/archive/index.php/t-138355.html – kfsone