ctypes的输入和输出参数

0 投票
2 回答
2080 浏览
提问于 2025-04-17 00:07

我在用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))

撰写回答