Python ctypes数据类型,用于传递给F90 real(8)数据类型

时间:2012-10-15 11:38:42

标签: python python-3.x fortran ctypes

我正在使用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参数的引用。

提前致谢。

1 个答案:

答案 0 :(得分:4)

标准未定义

real(8),因此任何事情都可能发生(您应该通过selected_real_kindiso_c_bindingiso_fortran_env获取类型号码。实际上,对于大多数编译器来说,它等同于c_double。您可能正在使用默认情况下保留的gfortran。

如果Python解释器期望默认情况下传递value参数,则可能存在问题。在ctypes中搜索byref()功能。