DLL中的C函数:
Multi(double Freq, double Power, int ports[], int Size)
Need to pass the 3rd parameter as an array from python
尝试了以下不同的代码:
A:
import ctypes
pyarr = [2,3]
arr = (ctypes.c_int * len(pyarr))(*pyarr)
lp = CDLL(CDLL_file)
lp.Multi(c_double(Freq), c_double(Power), arr ,c_int(Size))`
此代码显示错误 ## exception ::访问冲突读取0x00000000000
B:
retarr = (ctypes.c_int*2)()
retarr[0] =2
retarr[1] =3
lp = CDLL(CDLL_file)
lp.Multi(c_double(Freq), c_double(Power), retarr ,c_int(Size))`
此代码显示错误
## exception :: access violation reading 0x00000000000
C:使用ctypes.byref的相同代码也尝试了......
我的理解是函数需要一个数组作为参数, 尝试传递一个数组,如井地址。 两种情况都没有用 有没有人看到我的理解或其他任何错误来解决这个问题?
答案 0 :(得分:1)
指定您的nx
。鉴于此test.dll源:
argtypes
这有效:
#include <stdio.h>
__declspec(dllexport) void Multi(double Freq, double Power, int ports[], int Size)
{
int i;
printf("%f %f\n",Freq,Power);
for(i = 0; i < Size; ++i)
printf("%d\n",ports[i]);
}
输出:
from ctypes import *
dll = CDLL('test')
Multi = dll.Multi
Multi.argtypes = (c_double,c_double,POINTER(c_int),c_int)
Multi.restype = None
ports = (c_int * 2)(100,200)
Multi(1.1,2.2,ports,len(ports))