传递一个FORTRAN对象到C,反之亦然(Passing a FORTRAN object to C

2019-10-21 04:34发布

我有我的Fortran对象即

this%object%a

this%object%b

this%object%c

我想将它传递给C语言编写的代码,我主要一个FORTRAN编程和我有很少接触到C.我使用iso_c_binding传递整数和数组,但现在我需要传递的对象。

我以下列方式定义对象

    TYPE object

         INTEGER                                  :: a

         INTEGER                                  :: b

         INTEGER                                  :: c

    END TYPE object

Answer 1:

你可以互操作的类型:

use iso_c_binding

TYPE, BIND(C) :: object

     INTEGER(c_int)                                :: a

     INTEGER(c_int)                                :: b

     INTEGER(c_int)                                :: c

END TYPE object

type(object) :: o

有在对象上的标准限制。 例如,它不能包含分配或指针组件。

当你把它传递给一个可互操作的过程:

void sub(c_object* x){}

subroutine sub(x) bind(C,name="sub")
  type(object), intent(inout) :: x
end subroutine

call sub(o)

它是用C结构互操作

typedef struct {
  int a;
  int b;
  int c;
} c_object;

您也可以通过非互操作的类型和C,但是你必须使用指针:

subroutine sub2(x) bind(C,name="sub")
  type(c_ptr), value :: x
end subroutine

call sub2(loc(o))


文章来源: Passing a FORTRAN object to C and vice versa