|
20F 币
本帖最后由 cfortran 于 2017-7-17 14:21 编辑
fortran代码:
[Fortran] 纯文本查看 复制代码 04 | double precision , parameter :: pi = acos ( -1 .d 0 ) |
06 | type , Bind ( C ) :: singleinfo |
07 | integer ( c_int ) :: controlno |
08 | integer ( c_int ) :: unittype |
09 | integer ( c_int ) :: solid |
10 | real ( c_double ) :: coearea |
11 | real ( c_double ) :: volume |
12 | real ( c_double ) , dimension ( 3 ) :: center |
13 | integer ( c_int ) :: pointcount , trianglecount |
14 | type ( C_PTR ) :: pointchain , trianglechain |
17 | subroutine prismmeshing ( pn , plistdown , plistup , h , prisminfo ) Bind ( C , Name = "prismmeshing" ) |
18 | !DEC$ ATTRIBUTES DLLEXPORT::prismmeshing |
22 | real ( c_double ) , dimension ( 2 , pn ) :: plistdown , plistup |
24 | type ( singleinfo ) :: prisminfo |
25 | real ( c_double ) , dimension ( : , : ) , allocatable , target , save :: pointchain |
26 | integer ( c_int ) :: meshi |
27 | prisminfo % pointcount = 2 * pn |
28 | allocate ( pointchain ( 3 , prisminfo % pointcount +2 ) ) |
30 | pointchain ( 1 : 2 , 2 * meshi -1 ) = plistdown ( : , meshi ) |
31 | pointchain ( 3 , 2 * meshi -1 ) = 0 .d 0 |
32 | pointchain ( 1 : 2 , 2 * meshi ) = plistup ( : , meshi ) |
33 | pointchain ( 3 , 2 * meshi ) = h |
35 | pointchain ( : , 2 * pn +1 ) = pointchain ( : , 1 ) |
36 | pointchain ( : , 2 * pn +2 ) = pointchain ( : , 2 ) |
37 | prisminfo % pointchain = c_loc ( pointchain ) |
38 | end subroutine prismmeshing |
39 | end module hydromodelUtil |
C++代码:
[C++] 纯文本查看 复制代码 12 | double *trianglechain; |
15 | singleinfo cylinderinfo; |
17 | void prismmeshing( int &, double (*plistdown)[][2], double (*plistup)[][2], double &, struct singleinfo*); |
19 | void Chydro2View::OnMeshing() |
24 | double plistdown[][2]={ |
36 | prismmeshing(pn,&(plistdown),&(plistup),h1,&cylinderinfo); |
38 | str3.Format( "%lf" ,cylinderinfo.trianglechain[24]); |
39 | this ->MessageBox(str3); |
在网上找的传递方法,可是怎么改都不对,想问一下如何实现C++的整个多维数组的数据向fortran dll的函数中传递
|
最佳答案
查看完整内容
传递时,视为单变量传递。(即传递第一个元素的地址即可)
[mw_shl_code=fortran,true]extern "C" {
void prismmeshing(int &, double * plistdown, double *plistup , double &, struct singleinfo*);
}
struct singleinfo cylinderinfo;
int main()
{
int pn = 3;
double plistdown[][2] = {
{ 0, 0 },
{ 0, -8 },
{ 12.5, 0 }
};
double plistup[][2] = {
{ 0, 0 },
...
|