【发布时间】:2018-06-03 04:39:29
【问题描述】:
我有一个 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代码时,出现以下错误: 未定义对 processweather 的引用_
任何建议都将受到高度赞赏。
【问题讨论】:
-
这只是接口 - 实现是否也编译到 DLL 中?
-
不,我没有 dll 文件的源代码,而且我真的不知道如何在 fortran 代码中引用 dll 文件,因为我对 fortran 完全陌生。你能告诉我怎么做吗?
-
您可以使用依赖或任何 dll Walker 之类的应用程序来检查例程信息。另外,它可以互操作吗?它是否有任何后缀或前缀(如下划线或@)?传递机制是什么,stdcall还是cdecl...?
-
我没有太多关于 DLL 的信息,而是函数名和参数列表。因此,我不确定是否可以提供您提到的信息。顺便问一句,!DEC$ ATTRIBUTES DLLIMPORT :: EPLUSWTH 在 gfortran 中是否有任何努力?
-
那个特定的 $DEC 或 $MS 指令只是告诉链接器在查找表中粘贴什么,以便在链接器尝试链接程序或运行时时可以找到 DLL 中的函数loader 尝试在加载时动态链接程序。