ja7*_*a72 2 interop fortran fortran-iso-c-binding intel-fortran
我习惯使用以下语法
subroutine CalcA(A,N)
!DEC$ ATTRIBUTES DLLEXPORT :: CALCA
!DEC$ ATTRIBUTES ALIAS:'CalcA' :: CalcA
IMPLICIT NONE
...
end subroutine CalcA
Run Code Online (Sandbox Code Playgroud)
它在.dll中生成导出的函数

所以现在我ISO_C_BINDING用以下代码尝试新的
subroutine CalcA(A,N) BIND(C, NAME="CalcA")
USE, INTRINSIC :: ISO_C_BINDING
IMPLICIT NONE
...
end subroutine CalcA
Run Code Online (Sandbox Code Playgroud)
但是没有创建导出功能

那我在这里错过了什么?新的如何iso_c_binding取代已弃用的!DEC$ ATTRIBUTE DLLEXPORT声明?
PS.我通过VS2010在Win7-64平台上使用英特尔Fortran XE 2013.
正如Hans所说,该过程未导出,因为未要求链接器导出它.
BIND子句中的绑定标签(ISO_C_BINDING模块与讨论无关)实际上设置了过程的"链接器名称"(类似于ATTRIBUTES ALIAS所做的那样),并且以与C一致的方式这样做.BIND子句还将调用约定设置为C兼容(类似于ATTRIBUTES C).BIND子句的集体效果还包括ATTRIBUTES DECORATE的集合效果(并且集合编译器指令属性和我没有考虑过的子句之间可能存在其他细微差别).
至少有三种标记过程的方法,以便在DLL中导出:
什么对你最好的取决于...有些人更喜欢有出口的源内文档,有些则认为编译器指令的视觉外观和非标准性质令人无法忍受.