0

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

提前致谢。

4

1 回答 1

4

real(8)标准没有定义,所以任何事情都可能发生(你应该通过selected_real_kindoriso_c_binding或获得种类编号iso_fortran_env)。在实践中,它相当于c_double大多数编译器。您可能正在使用默认情况下适用的 gfortran。

如果 Python 解释器value默认通过参数传递,则可能会出现问题。在ctypes中搜索byref()函数。

于 2012-10-15T11:45:25.657 回答