我正在Fortran中为一个包含以下参数声明的软件(例如here)编写一个自定义回调函数
SUBROUTINE CONTACT_FORCE(TIME,UPAR,NPAR,PEN,RVEL,JFLAG,IFLAG,RESULT)
!DEC$ ATTRIBUTES DLLEXPORT,C::CONTACT_FORCE
...
DOUBLE PRECISION RESULT[REFERENCE](6) !Compiles ok
使用Compaq Visual Fortran 6可以很好地编译。所以我的问题是[REFERENCE]
标记是做什么的?我认为Fortran passes everything by reference(而不是价值)。当然,编译器中没有任何内容可以帮助解决这个问题,并且在线搜索很困难,因为关于Fortran的单词引用非常多,我不知道如何缩小它。
修改以上内容必须与
相同SUBROUTINE CONTACT_FORCE(TIME,UPAR,NPAR,PEN,RVEL,JFLAG,IFLAG,RESULT)
!DEC$ ATTRIBUTES DLLEXPORT,C::CONTACT_FORCE
!DEC$ ATTRIBUTES REFERENCE::RESULT
...
DOUBLE PRECISION RESULT(6) !Compiles ok
答案 0 :(得分:2)
我在这里假设MS产品。如果使用C
或STDCALL
属性,可以使Fortran按值或通过引用传递。见这里:
http://msdn.microsoft.com/en-us/library/aa294334(v=vs.60).aspx