我在使用python中的ctypes格式化输入和输出参数时遇到问题,以访问dll中的fortran函数。我可以访问库和函数,但我在如何格式化参数方面苦苦挣扎。
f90代码以:
开头subroutine DataSub (Data_input,da,db,dy)
double precision, intent(in) :: Data_input(9)
double precision, intent(out) :: da,db,dy
如何在ctypes中为这种情况定义输入和输出参数?
答案 0 :(得分:2)
最有可能这些是c_double,但是你不应该再使用“双精度”了。 使用带有kind属性的real,更好的是使用Fortran中的ISO_C_Binding来提供类似C的接口。 ISO_C_Binding还允许您按值而不是按引用传递参数。 没有它,您将需要使用http://docs.python.org/library/ctypes.html#passing-pointers-or-passing-parameters-by-reference
一些ISO_C_Binding的样本由John Reid提供:http://www.fortran.bcs.org/2002/interop.htm
答案 1 :(得分:2)
这样的事情:
from ctypes import *#just for brevity in this example
input = (c_double*9)()
input[0] = .....
da = c_double()
db = c_double()
dy = c_double()
dll.DataSub(byref(input), byref(da), byref(db), byref(dy))