sam*_*b8s 4 python fortran ctypes
I am looking to use ctypes to call some old fortran libraries which were written by my boss a few years ago. I followed the example given in this previous question, and I get the results as expected.
However, when I modify the code, to get slightly closer to the situation I face, so that
integer function addtwo(a, b)
integer, intent(in) :: a, b
addtwo = a + b
end function
Run Code Online (Sandbox Code Playgroud)
becomes
real function addtwo(a, b)
integer, intent(in) :: a, b
addtwo = a + b
end function
Run Code Online (Sandbox Code Playgroud)
i.e., the function is now real
, not integer
, the value returned is always 0
. Can anyone explain what's going on and how I should get around this?
(PS. I'm using a 64-bit gfortran compiler on mac os snow leopard)
EDIT: The function I'm struggling with looks like:
real function ykr(seed)
integer, intent(in) :: seed
real ykr0
ykr= real(seed)
end function
Run Code Online (Sandbox Code Playgroud)
Really, ykr
calls another function, ykr0
, recursively, but since I'm struggling even with this basic aspect I'm ignoring that for now. I can't see what's different between this code and the above, but calling ykr_(byref(c_int(4)))
returns 0
, not 4
as expected...
添加行
ykr_.restype = c_float
Run Code Online (Sandbox Code Playgroud)
在您的python代码中,在之前ykr_(byref(c_int(4)))
。这会将函数的返回类型设置为float
(或real
使用Fortan语言)。
在原始帖子中,这没有必要,因为int被假定为默认值。
归档时间: |
|
查看次数: |
1258 次 |
最近记录: |