Fortran Coder

fortran调用c生成的dll出现问题

查看数: 10148 | 评论数: 6 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2017-4-25 00:45

正文摘要:

fortran在调用一个开源软件的dll时,发生错误,请大家指教。 fortran代码如下: [Fortran] 纯文本查看 复制代码module cprog interface integer function SWMMSTEP(elpTime)          ...

回复

pasuka 发表于 2017-4-25 10:26:09
winston2017 发表于 2017-4-25 09:03
1、在module那里定义的elpTime不是全局变量吗?为什么还需要按照这个来定义?
2、不好意思误导您了,贴出 ...

不加额外申明,C程序哪里认得elpTime这个全局变量
winston2017 发表于 2017-4-25 09:03:01
pasuka 发表于 2017-4-25 08:48
1、通过ISO C BINDING可以让C访问Fortran的全局变量,虽然不推荐,参考:
Interoperable Global Variables  ...

1、在module那里定义的elpTime不是全局变量吗?为什么还需要按照这个来定义?
2、不好意思误导您了,贴出来的是我代码的一部分,在原代码中前面有赋值的。
3、非常感谢您的回答!
pasuka 发表于 2017-4-25 08:48:31
1、通过ISO C BINDING可以让C访问Fortran的全局变量,虽然不推荐,参考:
Interoperable Global Variables - The GNU Fortran Compiler
https://gcc.gnu.org/onlinedocs/g ... le-Global-Variables
2、elpTime变量为啥没有赋初值?
fcode 发表于 2017-4-25 07:58:02
看起来似乎没有问题(在混编接口部分)。断点单步调试一下吧,也许是开源软件的事儿。

此外,你这种混编方法太老土了。有更新潮(主要是规范)的混编方式:

[Fortran] 纯文本查看 复制代码
module cprog
interface
integer function SWMMSTEP(elpTime)                      
!DEC$ ATTRIBUTES C, ALIAS:'swmm_step'::SWMMSTEP
!DEC$ ATTRIBUTES REFERENCE::elpTime
real(kind=8)::elpTime
end function
end interface
real(kind=8)::elpTime       !全局变量
end module cprog

program F90useVCdll
use cprog
implicit none
integer::errorNum
do                    !do_01
      errorNum=SWMMSTEP(elpTime)
       if ((elpTime <= 0.0).or.(errorNum .ne. 0)) exit
enddo
end program

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-5 21:26

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表