wanglu 发表于 2010-3-1 17:05:22

Fortran中如何直接输出一个库函数到dll

例如输出IMSL库函数DEI到aa.dll,有如下代码:

real(8) FUNCTION F_DEI(x)
!DEC$ ATTRIBUTES DLLEXPORT::F_DEI
USE Numerical_Libraries
real(8) x
F_DEI=DEI(x)
END FUNCTION

但以上是通过函数F_DEI间接输出了DEI,如何直接输出IMSL库函数DEI呢?

fox000002 发表于 2010-3-5 15:52:00

IMSL 本身就有 DLL 版本吧

自己导出的话,这个恐怕不行

wanglu 发表于 2010-3-7 17:28:24

谢谢fox000002 !
在C++中可以的,我以为Fortran可以呢?
IMSL和Intel MKL很强大,似乎坛子里的人用的不多阿。

fox000002 发表于 2010-3-8 23:56:01

你说的 C++中可以 是怎么做的??

wanglu 发表于 2010-3-9 11:28:32

本帖最后由 wanglu 于 2010-3-9 11:34 编辑

你说的 C++中可以 是怎么做的??
fox000002 发表于 2010-3-8 23:56 http://forum.simwe.com/images/common/back.gif
将要输出的函数放到def文件中就可以的。
也可以不用def文件,直接在源代码中输出,不过我没有用过。

这种问题Fortran也应该可以实现,可能太专注于数值计算,不太注重这些小问题,也许最新或以后的版本可以解决这个问题。

再如以下声明:
!DEC$ ATTRIBUTES DLLEXPORT::F_DEI
允许放在函数外是不是更好?这样源代码中可不必出现函数体,函数体可在库lib中或obj文件中,这样就可以输出库中的函数了。C++中似乎就是这样做的。

还有一个问题:Fortran现在支持函数指针吗?从哪一个版本开始支持的?
如上面定义的函数F_DEI(x),可:
声明一个F_DEI类型的函数指针pF_DEI
pF_DEI=F_DEI
用pF_DEI(2.2)调用该函数。
我希望能这样使用,不知是否允许?

messenger 发表于 2010-3-9 13:50:46

Fortran90就支持指针,凡是支持Fortran90的版本都支持指针,CVF 6.X肯定支持

wanglu 发表于 2010-3-10 18:49:29

谢谢messenger !
我查了一下,Fortran90支持指针,但不支持函数指针;自Fortran2003开始支持函数指针(也叫过程指针)。
页: [1]
查看完整版本: Fortran中如何直接输出一个库函数到dll