使用ctypes从Python调用fortran函数

时间:2012-03-26 03:55:21

标签: python fortran ctypes

我希望用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

即,该函数现在是real,而不是integer,返回的值始终为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 ...

1 个答案:

答案 0 :(得分:4)

添加行

ykr_.restype = c_float
ykr_(byref(c_int(4)))之前的python代码中

。 这会将函数的返回类型设置为float(或Fortan语言中的real)。

在原始帖子中,这不是必需的,因为int被假定为默认值。