我在使用python中的ctype访问dll中的fortran函数时遇到了格式化输入和输出参数的问题。我可以访问库和函数,但我在如何格式化参数上苦苦挣扎。
f90代码的开头为:
subroutine DataSub (Data_input,da,db,dy)
double precision, intent(in) :: Data_input(9)
double precision, intent(out) :: da,db,dy如何在ctype中定义这种情况的输入和输出参数?
发布于 2011-08-23 03:20:22
如下所示:
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))发布于 2011-08-23 02:53:01
最有可能的是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
John Reid提供了ISO_C_Binding的一些示例:http://www.fortran.bcs.org/2002/interop.htm
https://stackoverflow.com/questions/7151925
复制相似问题