c++ - Fortran C++ 绑定 - 在 DLL(C++) 中读取错误值
问题描述
我正在尝试将 Fortran 与 C++ 一起使用。我按照本指南创建了一个 DLL(C++) 。但是,我没有创建MathClient.cpp
调用此 DLL 的 C++ 程序(如指南中所述),而是创建了MathClient.F90
调用此 DLL 的 Fortran 程序。
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
中的 C++ 函数MathLibrary.cpp
与上述指南中的相同。唯一的区别是,我添加了一些std::cout
,以便在 C++ 函数中打印接收到的变量的值。
问题是,C++ 函数从 Fortran 主代码中接收到错误的integer( ) 值。C_INT
例如,voidfibonacci_init
函数应该current_ = 1, previous_ = 1
在初始化期间接收值。取而代之的是,这些值是一些巨大的整数 ( current_ = 45028402782009632
)。
我正在使用英特尔 Parallel Studio 和 Visual Studio。我将不胜感激任何帮助。
解决方案
推荐阅读
- ios - 设置一个变量等于另一个变量加一并在swift中保存为用户默认值
- ruby - 如何找到最长的连续数字
- c++ - 带有链接的基本哈希表
- c# - 指向全局变量的指针
- javascript - 在 tensorflow.js 中设置权重的函数初始化器
- macos - BDS 异常程序终止(macOS 构建)
- python - 动态生成满足多个标准的约束解决方案
- d3.js - d3 强制布局:突出显示组中的节点及其邻居
- google-analytics - 如何在 Google Analytics 中过滤域名
- amazon-web-services - SAM模板环境变量使用map、list、关联数组?