是否可以将指针的 c++ 向量传递给 fortran

Is it possible to pass a c++ vector of pointers to fortran?

本文关键字:向量 fortran c++ 指针 是否      更新时间:2023-10-16

我需要将指针向量从c ++传递到Fortran dll,我不知道这是否可能。

尝试搜索,但我无法真正找到并回答我的问题。思路如下:

福特兰侧

!DEC$ATTRIBUTES DLLEXPORT :: TO_FORTRAN
      integer function TO_FORTRAN (test4)  BIND(C)
      use, intrinsic :: ISO_C_BINDING
      implicit none
      REAL, intent(in) :: test4(3)
      REAL, pointer :: test5
      call C_F_POINTER(C_LOC(test4),test5)
      TO_FORTRAN = 0
      END

C++ 代码

std::vector<float> test1(3);
std::vector<float> test2(3);
std::vector<float> test3(3);
std::vector<float*> test4(3);
test4[0] = test1.data();
test4[1] = test2.data();
test4[2] = test3.data();
TO_FORTRAN(test4);

如果它真的是一个指针数组,你也需要把它当作Fortran端的指针数组。您还必须记住,它们是指向数组的指针,而不仅仅是缩放实数(尽管它们在 C 中可能以相同的方式表示(。

!DEC$ATTRIBUTES DLLEXPORT :: TO_FORTRAN
      integer function TO_FORTRAN (test4)  BIND(C)
        use, intrinsic :: ISO_C_BINDING
        implicit none
        type(c_ptr), intent(in) :: test4(3)
        REAL, pointer :: test1(:), test2(:), test3(:)
        call C_F_POINTER(test4(1),test1, [3])
        call C_F_POINTER(test4(2),test2, [3])
        call C_F_POINTER(test4(3),test3, [3])
        TO_FORTRAN = 0
      END FUNCTION

      TO_FORTRAN(test4.data());