Fortran Coder

标题: IVF动态链接库的函数的调用接口声明 [打印本页]

作者: zhuhuanlai    时间: 2016-3-28 17:38
标题: IVF动态链接库的函数的调用接口声明
[Fortran] 纯文本查看 复制代码

!   根据IAPWS-IF97/IFC67编写的动态链接库的函数的调用接口声明
!    专供DEC Visual Fortran(Fortran语言) 使用
!    使用方法:
!    直接把本软件包提供的导入库文件(WASPCN.Lib)和模块文件(WASPCN.f90)加进对应项目,
!    在需要调用的程序文件中use模块文件(WASPCN.f90)即可!
module WASPCN
!DEC$objcommentlib:"WASPCN.lib"
!设定将要使用的标准
!已知压力(MPa)和温度(℃),求比焓(kJ/kg)、比熵(kJ/(kg.℃))、比容(m^3/kg)
Interface
Subroutine PT(P,T,H,S,V,X,R)
    !DEC$Attributes Stdcall,Dllimport,Alias:'PT'::PT
    Real(8)P,T,H,S,V,X
    Integer(4)R
    !DEC$Attributes Value::P
    !DEC$Attributes Value::T
    !DEC$Attributes Reference::H
    !DEC$Attributes Reference::S
    !DEC$Attributes Reference::V
    !DEC$Attributes Reference::X
    !DEC$Attributes Reference::R
End Subroutine
End Interface
end module WASPCN

上述调用接口中:
!DEC$objcomment lib:"WASPCN.lib"
!DEC$Attributes Stdcall,Dllimport,Alias:'PT'::PT
!DEC$Attributes Value::P
这三段语句分别是什么意思哦,我在彭国伦的教材上没有找到详细的解释,还请赐教,如果有这方面详细介绍的书籍,能否分享一下呢,先谢谢了。

作者: vvt    时间: 2016-3-28 19:16
!DEC$objcomment lib:"WASPCN.lib"
表示链接时带上 WASPCN.lib 一起链接
!DEC$Attributes Stdcall,Dllimport,Alias:'PT'::PT
表示 PT 采用 stdcall 调用协定。并由 DLL 导入,别名为 PT
!DEC$Attributes Value::P
表示 P 参数采用传值,而不是传址

这些用法都是 IVF 特有的扩展用法,并不是标准的规范。所以很少有教科书提及。
如果你想了解,可以看 IVF 的帮助 《General Compiler Directives》 的章节

作者: zhuhuanlai    时间: 2016-3-29 09:25
感谢VVT的热情回复!
作者: zhuhuanlai    时间: 2016-3-29 10:22
VVT您好,我在《General Compiler Directives》中看到IVF2013的编译指令说明中是这样写的:
[Fortran] 纯文本查看 复制代码
MODULE MOD1
  INTERFACE
    SUBROUTINE SUB1
    !DIR$ ATTRIBUTES C, ALIAS:'othername' :: NEW_SUB
    END SUBROUTINE
  END INTERFACE
  CONTAINS
    SUBROUTINE SUB2
    CALL NEW_SUB
    END SUBROUTINE
END MODULE

那是不是说不能再用!DEC,必须用!DIR呢?
作者: fcode    时间: 2016-3-29 12:11
!DEC$ 是由 Digital 公司的 DVF 延续下来的
Intel 为了保持与旧代码的一致性,沿用了 !DEC$

!DIR$ 也可以。两者等效。但是绝大多数程序员还习惯 !DEC$,包括我。
作者: zhuhuanlai    时间: 2016-3-29 14:08
谢谢fcode的及时回复!
作者: 深流水静水流深    时间: 2016-4-1 11:58
学习了,每天都有收获!
呵呵





欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2