回复: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)
休息

# 回答1


出售,弗雷德·施里布(Fred Schrieb):
您是对的,CTYPES似乎更加笨拙.但是我仍然卡住尝试返回所有这些参数
C API使用.我的CTYPES代码在下面.当我尝试打印时,它只是退出了
我在byref上通过的一个args,没有错误,什么也没有.诚然,我是CTYPES的新手,而不是C程序员
但是我可以肯定会使用一些帮助.我的CTYPES测试代码遵循...
从ctypes导入 *
'''
创建类似的共享对象文件.
gcc -shared -o rug520.so rug520.c
您需要创建一个适当的库.以上没有这样做 - 它
创建为简单对象文件.
我不知道如何在不使用AutoConf/Automake的情况下真正做到这一点.
diez
# 回答2


Diez B. Roggisch写道:
您是对的,CTYPES似乎更加笨拙.但是,我仍在尝试返回C API使用的所有这些参数.我的CTYPES代码在下面.当我尝试打印我做的一个Args时,它只是退出了运行 ef on,没有错误,什么也没有. 诚然,我是CTYPES的新手,而不是Cprogrammerbut,我可以确定使用一些帮助. 我的CTYPES测试代码如下...来自CTYPES Import *''创建共享对象文件,例如So.gcc -shared -o rug520.so rug520.c.c 您需要创建一个适当的库. 以上没有这样做 - 它 创建为简单对象文件. 我不知道如何在不使用AutoConf/Automake的情况下真正做到这一点. 迪兹 -http://mail.python.org/mailman/listinfo/python-list == 请参阅Info GCC 搜索共享(3.13链接选项) mkso.scr: #!/bin/bash #从参数1文件名创建一个lib.so # #vi $ 1 f =`basename $ 1 .c` GCC -C -FPIC $ f ld -shared -fpic $ f.o -o -o $ f.so #文件结束 我想$ 1可能是`cat *.c' 没有尝试过,但是....谁知道? (我写我的libs是libs.) steve nodeby@@hughes.net

标签: python

添加新评论