Я собираюсь использовать ctypes для вызова некоторых старых библиотек фортрана, написанных моим боссом несколько лет назад.Я последовал примеру, приведенному в этом предыдущем вопросе , и получил результаты, как и ожидалось.
Однако, когда я изменяю код, чтобы немного приблизиться к ситуации, с которой я сталкиваюсь, так что
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. Я использую 64-битный компилятор gfortran на Mac OS Snow Leopard)
EDIT : функция, с которой я борюсь, выглядит следующим образом:
real function ykr(seed)
integer, intent(in) :: seed
real ykr0
ykr= real(seed)
end function
Действительно, ykr
вызывает другую функцию, ykr0
, рекурсивно, но, поскольку я борюсь даже с этим основным аспектом, я 'Я игнорирую это сейчас.Я не вижу, что отличается между этим кодом и выше, но вызов ykr_(byref(c_int(4)))
возвращает 0
, а не 4
, как ожидалось ...