我有以下示例代码test.f90,
,我试图在我的Windows 10(x64位)计算机上使用Lahay Fortran(x32位)进行编译。
! Computes the square of a number
Subroutine sr1(a,b)
implicit none
#ifdef COMPILER_GF
!DEC$ ATTRIBUTES DLLEXPORT::sr1
!DEC$ ATTRIBUTES C, REFERENCE, ALIAS:'sr1' :: sr1
#endif
#ifdef COMPILER_IF
!DEC$ ATTRIBUTES DLLEXPORT, STDCALL ::sr1
!DEC$ ATTRIBUTES DECORATE, ALIAS : 'sr1' :: sr1
!DEC$ ATTRIBUTES REFERENCE :: a,b
#endif
#ifdef COMPILER_LF
dll_export sr1
#endif
integer a,b
b = a*a
End Subroutine sr1
在Lahay Fortran命令提示符下,以下行执行所有操作并创建test.DLL
。
lf95 test.f90 -win -dll -lfe- "-Cpp" -lfe "DCOMPILER_LF" -ml msvb
现在,我正在尝试使用以下内容阅读.DLL
中的R (x32-bit)
dyn.load("path_to_file/test.dll")
is.loaded("sr1")
#Returns TRUE
DLL
加载到R
罚款。但是,当我试图调用子例程时,R
崩溃了:
.Fortran("sr1", a=as.integer(2), b=as.integer(4))
# R crashes here
有没有人知道解决问题的原因或解决方法是什么?