我已经从第三方DLL加载函数。我已成功通过ctypes.windll.LoadLibrary
访问作为图书馆入口点的函数。该函数有30个参数,包括许多二维数组。函数原型指定参数在大多数情况下通过引用传递。当我进行函数调用时,我得到一个返回码,表示内部变量有问题,这让我认为我已经通过了错误的指针。 (这很模糊。)我的问题是,在什么情况下我应该使用ctypes.byref
作为参考。例如,假设我有以下内容:Python,何时使用ctypes.byref作为参考传递
double_matrix = (ctypes.c_double * 100) * 100
my_array = double_matrix()
我应该传递my_array还是ctypes.byref(my_array)?
my_string = ctypes.create_string_buffer("Hello world!")
那么使用types.create_string_buffer()创建的对象呢?如果需要传递引用,我应该传递my_string还是ctypes.byref(my_string)?
编辑:
我没有该DLL的代码。
函数原型看起来基本上是这样的,除了每种类型大概有5或6个。 (char * input,int indicator,double(* dmatrix)[100] [100],int(* groups)[100]);
感谢
WOHA,30个参数...如果代码是你,你有没有使用对象/结构考虑在传递参数之前将参数逻辑聚类? – 2013-05-09 23:18:20
您能否向我们展示该函数的C原型,而不是试图用英文来描述它? (或者,更好的是,向我们展示一个不需要30个参数的精简版本...) – abarnert 2013-05-09 23:30:52
我希望这是一个足够好的函数描述。 – aetodd 2013-05-10 00:49:57