如何解决Fortran C++ 绑定 - 在 DLL(C++) 中读取错误值
我正在尝试将 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 举报,一经查实,本站将立刻删除。