回复:swig或ctypes,在枪下,需要帮助
迪兹写道...
您是对的,CTYPES似乎更加笨拙.但是我仍然卡住尝试返回所有这些参数
C API使用.我的CTYPES代码在下面.当我尝试打印时,它只是退出了
我在byref上通过的一个args,没有错误,什么也没有.诚然,我是CTYPES的新手,而不是C程序员
但是我可以肯定会使用一些帮助.我的CTYPES测试代码遵循...
从ctypes导入 *
'''
创建类似的共享对象文件.
gcc -shared -o rug520.so rug520.c
我想打电话的C API就是这样.
int rugcalc(char * smdsrecord,
char * shehabtype,
char * smodel,
int iquarterlyflag,
double ncmiarray [],
char * srughier,
char * srugmax,
int * irughier,
int * irugmax,
double * ncmivaluehier,
double * ncmivaluemax,
int * iadlsum,
int * icpscode,
char * srugsversion,
char * sdllversion,
int * iError);
'''
libc = cdll(" rug520.so")
cmiarraydef = c_double * 59
zerocmi = cmiarraydef()#这是一张内部使用的表,但是0.0应该可以工作,直到我找出其余部分.
def getrug(MDS):
#print MDS
SMDSRECORD = C_CHAR_P()
srehabtype = c_char_p()
smodel = c_char_p()
iquarterlyflag = c_int()
srughier = c_char_p()
srugmax = c_char_p()
irughier = c_int()
irugmax = c_int()
ncmivaluehier = c_double()
ncmivaluemax = c_double()
iadlsum = c_int()
ICPSCODE = C_INT()
srugsversion = c_char_p()
sdllversion = c_char_p()
iError = c_int()
smdsrecord.value = mds
shehabtype ='Mcare'
smodel ='34'
结果= libc.rugcalc(smdsrecord,shehabtype,smodel,iquarterlyflag,
Zerocmi,
Byref(Srughier),
Byref(Srugmax),
Byref(irughier),
Byref(irugmax),
Byref(ncmivaluehier),
Byref(ncmivaluemax),
byref(iadlsum),
BYREF(ICPSCODE),
byref(srugsversion),
byref(sdllversion),
Byref(iError))
打印"结果",结果
打印iquarterlyflag.value
打印" srugmax",srugmax#this Print会导致出口,尝试.值相同的结果
打印"返回"#我永远不会看到此印刷品.
datafile = open('mdsdata.txt')
对于datafile中的d:
如果d [0] =='b':
getrug(d)
休息