Fortran调用c++指针函数

Fortran calls C++ pointer function

本文关键字:函数 指针 c++ 调用 Fortran      更新时间:2023-10-16

我有一个连接Fortran程序与c++函数的问题。我的任务是从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

但是我应该用什么函数返回一个指针?

谢谢!

正如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

在调用代码中,您必须从iso_c_binding模块调用c_f_pointer():

  use iso_c_binding
  type(c_ptr) :: p
  real(c_double), pointer :: x
  p = GetSplinePtr()
  call c_f_pointer(p, x)