我在使用C ++函数连接Fortran程序时遇到问题。 我的任务是从fortran调用C ++函数指针,例如:
// C++ function pointer
double* GetSplinePtr()
{
return sp;
}
我使用 iso_c_binding 程序和fortran 界面 。 对于非指针函数,我通常使用此声明:
real(kind=c_double) function Name(x,y) bind(c, name='Name')
use iso_c_binding
implicit none
real(c_double), intent(in), value :: x,y
end function Name
但是我应该为返回指针的函数使用什么?
谢谢!
答案 0 :(得分:3)
正如Ross评论的那样,你必须让Fortran接口返回C指针并自己转换为Fortran指针。
interface
function GetSplinePtr() result(res) bind(C, name="GetSplinePtr")
use iso_c_binding
type(C_ptr) :: res
end function
end interface
在调用代码中,您必须从c_f_pointer()
模块中调用iso_c_binding
:
use iso_c_binding
type(c_ptr) :: p
real(c_double), pointer :: x
p = GetSplinePtr()
call c_f_pointer(p, x)