使用ctypes从Python调用fortran函数

我希望使用ctypes调用一些由我的老板几年前编写的旧的fortran库.我遵循了this previous question中给出的示例,并且得到了预期的结果.

但是,当我修改代码时,为了稍微接近我所面对的情况,

integer function addtwo(a, b)
  integer, intent(in) :: a, b
  addtwo = a + b
end function

变成

real function addtwo(a, b)
  integer, intent(in) :: a, b
  addtwo = a + b
end function

也就是说,该函数现在是实数,而不是整数,返回的值始终为0.有人可以解释发生了什么以及如何解决此问题吗?

(PS.我在Mac OS Snow Leopard上使用64位gfortran编译器)

编辑:我正在努力的功能看起来像:

real function ykr(seed)

  integer, intent(in) :: seed
  real ykr0
  ykr= real(seed)
end function

确实,ykr递归调用了另一个函数ykr0,但是由于即使在这个基本方面上我都在挣扎,我暂时忽略了它.我看不到这段代码和上面的代码有什么区别,但是调用ykr_(byref(c_int(4)))返回0,而不是预期的4.

解决方法:

添加行

ykr_.restype = c_float

在python代码中,在ykr_(byref(c_int(4)))之前.
这会将函数的返回类型设置为float(或在Fortan语言中为实数).

在原始帖子中,这没有必要,因为int被假定为默认值.

上一篇:Ctypes Python <> Fortran DLL的访问冲突


下一篇:C和Fortran中的精度不同