gfortran、DLL、下划线

Gil*_*aor 1 dll fortran gfortran

我想从第三方 DLL 访问一些子例程。这些函数使用 STDCALL 作为调用约定。

跑步dumpbin /export foo.dll给了我类似的东西:

      ...
      7    6 00004B40 Foo@16
      ...
Run Code Online (Sandbox Code Playgroud)

我使用以下方法编译我的代码:

      gfortran test.f90 -o test.exe -Wl,foo.dll
Run Code Online (Sandbox Code Playgroud)

我收到错误:(undefined reference to '_foo_'注意下划线)。

我尝试添加-mrtd编译标志以及我在谷歌上搜索的其他标志,但都无济于事。

我怎样才能告诉 fortran 不要添加下划线?


编辑:需要进行一些澄清。

  1. 我有一个现有的 DLL,但没有源代码。
  2. 如果有帮助的话,此 DLL 是用 Visual Basic 编写的。
  3. 我想从fortran调用这个 DLL 。
  4. 当我在 test.f90 中写入时:Foo(1.0d0)出现undefined reference to '_foo_'链接错误

M. *_* B. 5

您尝试过 -fno-下划线 吗?

我在http://www.rhinocerus.net/forum/lang-fortran/604847-fortran-dll-call-excel-2.html上找到了 Tobias Burnus(gfortran 开发人员)的帖子(接近尾声)——他建议使用编译器指令而不是 -mrtd。