我希望用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
...
答案 0 :(得分:4)
添加行
ykr_.restype = c_float
在ykr_(byref(c_int(4)))
之前的python代码中。
这会将函数的返回类型设置为float
(或Fortan语言中的real
)。
在原始帖子中,这不是必需的,因为int被假定为默认值。