首页 > 解决方案 > 如何在fortran中调用dll

问题描述

我有一个 dll 文件,其中包含一个函数“ProcessWeather”,并希望在 fortran 代码中调用此函数,如下所示:

PROGRAM myprog
!DEC$ ATTRIBUTES DLLIMPORT :: EPLUSWTH


INTERFACE

  SUBROUTINE ProcessWeather(InType,OutType,InFileName,OutFileName,ErrFlag)

    CHARACTER(len=*), INTENT(IN) :: InType       ! InputFile Type
    CHARACTER(len=*), INTENT(IN) :: OutType      ! OutputFile Type
    CHARACTER(len=*), INTENT(IN) :: InFileName   ! InputFile Name (Full path)
    CHARACTER(len=*), INTENT(IN) :: OutFileName  ! OutputFileName (Full path)
    REAL(4), INTENT(OUT)  :: ErrFlag      ! If errors are found,
                                                 ! set to true and put
                                                 ! description put in file.
 END SUBROUTINE
END INTERFACE
END PROGRAM

dll 文件放置在我放置 fortran 文件的相同位置。编译 fortran 代码时,出现以下错误: undefined reference to processweather_

任何建议将不胜感激。

标签: dllfortran

解决方案


如果您使用 gfortran 进行编译(正如您的评论似乎暗示的那样),这些!$DEC指令将被忽略。但是您可以使用GCC 指令,即ATTRIBUTES指令并在其中声明属性DLLIMPORT

您也可以只使用标准bind(C, name="the_name"). 另外,据我记得,GCC 在创建 DLL 时不需要任何属性来使符号在外部可见。


推荐阅读