擅长:python、mysql、java
<p>您需要有正确的函数签名,但是Python argtypes类型应该是<code>POINTER(c_double)</code>。C中的数组衰减到函数参数中的指针:</p>
<p><strong>C示例(Windows)</strong></p>
<pre><code>#include <stdio.h>
__declspec(dllexport) double f(int n, double args[])
{
double sum = 0;
int nn;
for(nn = 0; nn < n; ++nn)
{
printf("args[%d] = %ld\n",nn,args[nn]);
sum += args[nn];
}
return sum;
}
</code></pre>
<p><strong>c类型示例</strong></p>
<pre><code>>>> from ctypes import *
>>> dll = CDLL('x')
>>> dll.f.restype = c_double
>>> dll.f.argtypes = c_int,POINTER(c_double)
>>> L=[1.1,2.2,3.3,4.4,5.5]
>>> args = (c_double*len(L))(*L)
>>> dll.f(len(args),args)
args[0] = 1.100000
args[1] = 2.200000
args[2] = 3.300000
args[3] = 4.400000
args[4] = 5.500000
16.5
</code></pre>