ctypes的输入和输出参数
我在用Python的ctypes库调用一个Fortran函数时,遇到了格式化输入和输出参数的问题。我可以访问这个库和函数,但在如何格式化参数上有些困难。
这个Fortran代码是这样的:
subroutine DataSub (Data_input,da,db,dy)
double precision, intent(in) :: Data_input(9)
double precision, intent(out) :: da,db,dy
那么在ctypes中,应该如何定义这个情况下的输入和输出参数呢?
2 个回答
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
John Reid提供了一些ISO_C_Binding的示例:http://www.fortran.bcs.org/2002/interop.htm
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))