如何将 Vector 从 C++ 传递到 Fortran?

宣布

我有一个 C++ 代码,我想在 Fortran 中调用一些函数。我有以下功能

Vector3d CWLiDAR__get_position(CWLiDAR* This)
{
    return This->get_position();
}

Fortran 中有一个包装器:

module CWLiDAR_module
    use, intrinsic :: ISO_C_Binding
    implicit none

    private
    type CWLiDAR_type
        private
        type(C_ptr) :: object = C_NULL_ptr
    end type CWLiDAR_type

    interface    
        function C_CWLiDAR__get_position (this)  result(pos)  bind(C, name="CWLiDAR__get_position")
            import
            type(C_ptr), value                          :: this
            real(C_double), intent(out), dimension(*)   :: pos
        end function C_CWLiDAR__get_position
    end interface

    interface get_position
        module procedure CWLiDAR__get_position
    end interface get_position


    public :: get_position, CWLiDAR_type


    contains

    function CWLiDAR__get_position(this) result(pos)
        type(CWLiDAR_type), intent(in)                  :: this
        double precision, dimension(0:3)                :: pos

        pos = C_CWLiDAR__get_position(this%object)
    end function CWLiDAR__get_position

end module CWLiDAR_module

但是我收到以下编译错误:

     function C_CWLiDAR__get_position (this)  result(pos)  bind(C, name="CWL
                                                            1
Error: Assumed size array at (1) must be a dummy argument
         function C_CWLiDAR__get_position (this)  result(pos)  bind(C, name="CWL
        1
Error: Assumed size array at (1) must be a dummy argument

如何将 Vector3D 传递给 Fortran?

弗拉基米尔·F

返回数组的函数不能与 C 互操作。你不能从 Fortran 调用这样的函数。至少不能便携地使用bind(C).

如果可能(但不是!),语法必须是

   interface    
        function C_CWLiDAR__get_position (this)  result(pos)  bind(C, name="CWLiDAR__get_position")
            import
            type(C_ptr), value                          :: this
            real(C_double),  dimension(some_number)   :: pos
        end function C_CWLiDAR__get_position
    end interface

编译器抱怨Fortran中既不允许intentdimension(*)不允许函数结果。这就是错误消息的原因。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将字符串从 Fortran 传递到 C++

将标量和数组(任何尺寸)从Fortran传递到C

将字符串从Fortran dll传递到C#

如何将 Fortran 的复杂类型传递给 C#?

如何将多个Fortran字符串传递给C?

将数组从C / C ++传递到Fortran并返回计算出的数组

将字符串参数从C传递到Fortran子例程的问题

如何将结构从C#传递到C ++ DLL?

如何将双指针从C ++传递到C#

如何将接口从C#传递到C ++

如何使用JNA将List <T>从Java传递到C ++ std :: vector函数参数

您如何将数据从Objective C传递到Swift?

JNA如何将String []从Java传递到C代码

如何将错误消息从C传递到Go?

c#如何将变量从方法传递到main?

如何将 C# 字典传递到 typescript Map

如何将OpenCV Mat传递到C ++ Tensorflow图中?

如何将COM对象从VBA传递到C ++ DLL

如何将输入从C ++函数传递到主函数

如何将组件指针从 QML 传递到 C++?

如何将变量从颤动传递到本机目标c

如何将DOMDocument从VBA传递到C ++ dll

Swig通过ref将Std :: vector通过ref /从C#传递到C ++

如何将Fortran c_ptr与null进行比较

当我将指针从Fortran传递到C ++时,第一个元素的值丢失了

将字节数组作为std :: vector <char>从Node.js传递到C ++插件

通过 Ctypes 将 std:vector 从 C++ 传递到 Python:获取无意义的值

从C ++ DLL到Delphi:如何将指向数据的指针从C ++ DLL传递到Delphi程序?

将FORTRAN对象传递给C,反之亦然