问题描述
我正在尝试将 Fortran 与 C++ 结合使用。我按照这个 guide 创建了一个 DLL(C++)。但是,我没有创建调用此 DLL 的 C++ MathClient.cpp
程序(如指南中所述),而是创建了调用此 DLL 的 Fortran MathClient.F90
程序。
Fortran 主要代码:
PROGRAM MAIN
USE MOD_INTERFACE
IMPLICIT NONE
INTEGER(C_INT) :: A,B
INTEGER(C_INT) :: INDEX
INTEGER(C_INT) :: CURRENT
LOGICAL(C_BOOL) :: BOLEAN
A = 1
B = 1
! Initialize a Fibonacci relation sequence.
CALL FIBONACCI_INIT(A,B)
! Write out the sequence values until overflow.
DO
BOLEAN = FIBONACCI_NEXT()
IF (.NOT. BOLEAN) EXIT
INDEX = FIBONACCI_INDEX()
CURRENT = FIBONACCI_CURRENT()
WRITE(*,*) INDEX,': ',CURRENT
END DO
WRITE(*,*) FIBONACCI_INDEX() + 1,&
'Fibonacci sequence values fit in an unsigned 64-bit integer.'
END PROGRAM MAIN
Fortran 模块代码:
MODULE MOD_INTERFACE
USE,INTRINSIC :: ISO_C_BINDING
INTERFACE
SUbroUTINE FIBONACCI_INIT ( A,B ) bind ( C,name = "fibonacci_init" )
IMPORT
IMPLICIT NONE
INTEGER (C_INT) :: A,B
END SUbroUTINE FIBONACCI_INIT
LOGICAL(C_BOOL) FUNCTION FIBONACCI_NEXT ( ) bind ( C,name = "fibonacci_next" )
IMPORT
IMPLICIT NONE
END FUNCTION FIBONACCI_NEXT
INTEGER(C_INT) FUNCTION FIBONACCI_CURRENT ( ) bind ( C,name = "fibonacci_current" )
IMPORT
IMPLICIT NONE
END FUNCTION FIBONACCI_CURRENT
INTEGER(C_INT) FUNCTION FIBONACCI_INDEX ( ) bind ( C,name = "fibonacci_index" )
IMPORT
IMPLICIT NONE
END FUNCTION FIBONACCI_INDEX
END INTERFACE
END MODULE MOD_INTERFACE
MathLibrary.cpp
中的 C++ 函数与上述指南中的相同。唯一的区别是,我添加了一些 std::cout
,以便在 C++ 函数中打印接收到的变量的值。
问题是,C++ 函数从 Fortran 主代码接收错误整数(C_INT
) 值。例如,void fibonacci_init
函数应在初始化期间接收值 current_ = 1,prevIoUs_ = 1
。取而代之的是,这些值是一些巨大的整数 (current_ = 45028402782009632
)。
我正在使用英特尔 Parallel Studio 和 Visual Studio。如有任何帮助,我将不胜感激。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)