Я получаю доступ к C++ DLL с использованием Python Ctypes в Windows 7. У меня есть документация для DLL, но я не могу ее открыть. Я пытаюсь использовать функцию C++, которая принимает функцию, которая, в свою очередь, принимает unsigned int и указатель void. Вот краткий пример кода, который не может:Ctypes - Передача указателя Void из 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
Всякий раз, когда я запускаю этот код, я получаю эту ошибку на последней строке:
OSError: exception: access violation writing 0x002CF330.
Я не знаю, как подойти к этому вопросу, так как это ошибка C++, а не ошибка Python. Я думаю, что это связано с моим указателем void, поскольку подобные ошибки, которые я нашел в Интернете для C++, связаны с указателями. Что-то не так с указателем Ctypes void, или я делаю что-то неправильно?
Быстрый google показывает, что 'Toupcam_StartPullModeWithCallback' принимает три аргумента: камера, обратный вызов, контекст. http://www.webastro.net/forum/archive/index.php/t-138355.html – kfsone