我希望使用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被假定为默认值.