在FORTRAN的过程和函数中调用C++函数,可按如下三步处理(以调C++函数Sample为例)
1:在调用函数所在的Fortran函数的最前部要用USE 声明该函数 USE Sample_Mode
2:在Fortran文档中,需要说明Sample函数的接口
MODULE Sample_Mode
INTERFACE
SUBROUTINE Sample(nFlag,nFlagV )
!MS$ATTRIBUTES C,ALIAS:’_Sample’:: Sample
!MS$ATTRIBUTES REFERENCE :: nFlag
!MS$ATTRIBUTES VALUE :: nFlagV
INTEGER nFlag,nFlagV
ENDSUBROUTINE
END INTERFACE
END MODULE
说明:
!MS$ATTRIBUTES C,ALIAS:用来说明函数名间的关系,在‘’內为该函数在C++中的函数名,在::后为在FORTRAN中调用的函数名,两者可不同,也可相同。
!MS$ATTRIBUTES REFERENCE :: nFlag 说明参数传递是引用方式,修改后对调用过程有效;
!MS$ATTRIBUTES VALUE :: nFlag 说明参数传递是传值方式,修改后对调用过程无效;
3:在C++文档中,该函数的说明
extern “C” void Sample(int *nFlag, int nFlagV )
{
}
注意:此处“C”的C必需为大写。
1:在调用函数所在的Fortran函数的最前部要用USE 声明该函数 USE Sample_Mode
2:在Fortran文档中,需要说明Sample函数的接口
MODULE Sample_Mode
INTERFACE
SUBROUTINE Sample(nFlag,nFlagV )
!MS$ATTRIBUTES C,ALIAS:’_Sample’:: Sample
!MS$ATTRIBUTES REFERENCE :: nFlag
!MS$ATTRIBUTES VALUE :: nFlagV
INTEGER nFlag,nFlagV
ENDSUBROUTINE
END INTERFACE
END MODULE
说明:
!MS$ATTRIBUTES C,ALIAS:用来说明函数名间的关系,在‘’內为该函数在C++中的函数名,在::后为在FORTRAN中调用的函数名,两者可不同,也可相同。
!MS$ATTRIBUTES REFERENCE :: nFlag 说明参数传递是引用方式,修改后对调用过程有效;
!MS$ATTRIBUTES VALUE :: nFlag 说明参数传递是传值方式,修改后对调用过程无效;
3:在C++文档中,该函数的说明
extern “C” void Sample(int *nFlag, int nFlagV )
{
}
注意:此处“C”的C必需为大写。