Fortran调用C ++指针函数

时间:2015-10-04 14:50:55

标签: c++ pointers fortran

我在使用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

但是我应该为返回指针的函数使用什么?

谢谢!

1 个答案:

答案 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)