2014-10-28 71 views
1

我即传递一个FORTRAN对象到C,反之亦然

this%object%a 

this%object%b 

this%object%c 

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

我以下列方式

TYPE object 

     INTEGER         :: a 

     INTEGER         :: b 

     INTEGER         :: c 

    END TYPE object 
+0

你的Fortran对象是如何声明的?此外,您的问题被标记为fortran90,但IIRC ISO_C_BINDING是Fortran 2003的一项功能,(目前由英特尔Fortran支持) – deStrangis 2014-10-28 12:07:51

+0

您知道C结构吗?你的Fortran类型是怎样的?有些可以互操作,有些则不可以。 @deStrangis重申。 – 2014-10-28 12:30:13

+0

我需要什么FORTRAN类型? @deStrangis – Matty 2014-10-28 12:53:51

回答

4

您可以互操作的类型定义对象:

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)) 
+0

谢谢,非常感谢 – Matty 2014-10-28 14:16:08

相关问题