是否可以将c ++指针矢量传递给fortran?

时间:2019-04-19 13:04:52

标签: c++ fortran

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

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

Fortran方面

!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);

1 个答案:

答案 0 :(得分:1)

如果它实际上是一个指针数组,则还需要在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());