0 dll fortran visual-studio-2010 entry-point
继续关于 dll 的最后一个未解决的问题,我尝试使用 g95 使用以下命令创建 fortran dll:
g95 -c FCall.f90
g95 -shared -mrtd -o FCall.dll FCall.o
当我将它链接到 VB 时,它显示“无法在 DLL 'C:\Users\Hp\Documents\Visual Studio 2010\Projects\WindowsApplication5\WindowsApplication5\FCall.dll' 中找到名为 'FortranCall' 的入口点。”
这是 FORTRAN 代码:
SUBROUTINE FortranCall (r1, num)
!DEC$ ATTRIBUTES DLLEXPORT :: FortranCall
!DEC$ ATTRIBUTES ALIAS:'FortranCall' :: FortranCall
REAL,INTENT(IN) :: r1
REAL,INTENT(OUT) :: num
num = MOD (r1, 256.0)
END SUBROUTINE
Run Code Online (Sandbox Code Playgroud)
这是VB代码:
Private Sub Command1_Click()
r1 = 456.78
Call FortranCall(r1, Num)
Text1.Text = Str$(Num)
End Sub
Run Code Online (Sandbox Code Playgroud)
VB中的模块代码:
Declare Sub FortranCall Lib"C:\Users\Hp\Documents\Visual Studio 2010\Projects\WindowsApplication5\WindowsApplication5\FCall.dll"
(r1 As Single, Num As Single)
G95 有自己的导出语句从 dll 导出函数吗?在这个子程序中,导出属性 (!DEC$ ATTRIBUTES DLLEXPORT :: FortranCall) 用于 Visual fortran
您使用的指令是高度编译器特定的东西。甚至名称也暗示它特定于 DEC 编译器(及其后代 - Compaq 和 Intel)。
Gfortran 有同样的东西,但有!$GCC,但不是 G95。
我强烈建议您改用 Fortran 2003 功能bind(C,name="name")来设置符号名称。另请参阅标签/sf/ask/tagged/fortran-iso-c-binding/。
SUBROUTINE FortranCall (r1, num) bind(C,name="FortranCall")
!DEC$ ATTRIBUTES DLLEXPORT :: FortranCall
END SUBROUTINE
Run Code Online (Sandbox Code Playgroud)
默认情况下,GCC 和 G95 都导出符号,不需要该dllexport指令,但将其保留在 Intel Fortran 中。
或者,您可以尝试选项-fno-underscoring,但这也是特定于 g95 的,并且不适用于其他编译器。
| 归档时间: |
|
| 查看次数: |
1017 次 |
| 最近记录: |