ctypes的输入和输出参数

时间:2011-08-22 18:35:04

标签: python fortran ctypes

我在使用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中为这种情况定义输入和输出参数?

2 个答案:

答案 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))