我正在使用ctypes(Pthyon3.2)从64位Debian Linux机器上的共享库中调用F90例程。如果F90例程采用类型参数,
! We're in fortran (F90)
subroutine MyFunc(FooF90)
real(8),intent(in) :: FooF90
! do some stuff...
return
我应该从Python传递什么?我的猜测是,
# We're in Python3.2
F90func(ctypes.byref(ctypes.c_double(FooPy)))
这是对的吗?我无法轻易找到从Python传递类型为real(n)的fortran参数的引用。
提前致谢。
答案 0 :(得分:4)
real(8)
,因此任何事情都可能发生(您应该通过selected_real_kind
或iso_c_binding
或iso_fortran_env
获取类型号码。实际上,对于大多数编译器来说,它等同于c_double
。您可能正在使用默认情况下保留的gfortran。
如果Python解释器期望默认情况下传递value
参数,则可能存在问题。在ctypes中搜索byref()
功能。