|
C函数应该是一个三维数组,你可能需要构建一个指针链给他用。
[C] 纯文本查看 复制代码 03 | int get_table( char ***Results){ |
04 | Results[0][0][0] = 'f' ; |
05 | Results[0][0][1] = 'c' ; |
06 | Results[0][0][2] = 'o' ; |
07 | Results[0][0][3] = 'd' ; |
08 | Results[0][0][4] = 'e' ; |
09 | Results[3][5][0] = 'f' ; |
10 | Results[3][5][1] = 'c' ; |
11 | Results[3][5][2] = 'o' ; |
12 | Results[3][5][3] = 'd' ; |
13 | Results[3][5][4] = 'e' ; |
[Fortran] 纯文本查看 复制代码 03 | use CLangMultiDimensionArrayLink 2 D |
07 | integer ( c_int ) function get_table ( val ) bind ( c ) |
09 | type ( c_ptr ) , value :: val |
13 | Integer , parameter :: M = 6 , N = 4 |
14 | character ( 8 ) , target :: Results ( M , N ) |
16 | type ( CLang 2 DArrayLink ) :: linkResults |
17 | i = get_table ( linkResults % Set ( Results ) ) |
18 | write ( * , "(2(a8,1x))" ) Results ( 1 , 1 ) , Results ( M , N ) |
以下模块可以复制粘贴,不做修改。
[Fortran] 纯文本查看 复制代码 01 | Module CLangMultiDimensionArrayLink 2 D |
03 | use , Intrinsic :: ISO_C_Binding |
07 | Type , public :: CLang 2 DArrayLink |
08 | type ( c_ptr ) , pointer :: p 1 ( : ) , p 2 ( : , : ) |
12 | End Type CLang 2 DArrayLink |
16 | Type ( c_ptr ) Function Set ( this , datas ) result ( cptr ) |
17 | class ( CLang 2 DArrayLink ) :: this |
18 | class ( * ) , intent ( IN ) :: datas ( 1 : , 1 : ) |
19 | integer :: sizes ( 2 ) , i , j |
21 | if ( associated ( this % p 1 ) ) deallocate ( this % p 1 , this % p 2 ) |
22 | Allocate ( this % p 1 ( sizes ( 2 ) ) , this % p 2 ( sizes ( 1 ) , sizes ( 2 ) ) ) |
25 | this % p 2 ( j , i ) = c_loc ( datas ( j , i ) ) |
27 | this % p 1 ( i ) = c_loc ( this % p 2 ( 1 , i ) ) |
29 | cptr = c_loc ( this % p 1 ( 1 ) ) |
32 | Subroutine Release ( this ) |
33 | type ( CLang 2 DArrayLink ) :: this |
34 | if ( associated ( this % p 1 ) ) deallocate ( this % p 1 , this % p 2 ) |
35 | End Subroutine Release |
37 | End Module CLangMultiDimensionArrayLink 2 D |
|
|