gpt4 book ai didi

c++ - 是否可以将指针的 C++ vector 传递给 Fortran?

转载 作者:行者123 更新时间:2023-11-30 04:48:33 25 4
gpt4 key购买 nike

我需要将指针 vector 从 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);

最佳答案

如果它确实是一个指针数组,您也需要在 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());

关于c++ - 是否可以将指针的 C++ vector 传递给 Fortran?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55762343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com